이 글에서는 fstream 라이브러리를 이용한(C++11 이상 버전 권장, 버퍼 객체 bool 타입으로 변환 가능해서) 파일 입출력 예제를 다뤄보겠다.
수업에서 배운 dfs, bfs, 다익스트라 알고리즘 등을 복습할 겸 C++로 코드를 짜보았다.
1. include
먼저 기본 입출력에 필요한 iostream, 그래프 정보를 저장하는 데 쓸 이차원 배열을 동적으로 생성하기 위한 vector, 파일 입출력을 위한 fstream 라이브러리를 include 해온다.
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
*std 네임스페이스를 미리 선언했다. 이렇게 되면 원래는 std::fstream 형인 fstream을 그냥 fstream으로 사용할 수 있다.
2. 변수들과 파일 스트림 객체를 만들어 준다.
파일 스트림 객체는 fstream 말고도 쓰기만을 위한 ofstream, 읽기만을 위한 ifstream으로도 객체를 생성할 수 있다.
int main(){
int n;
int V;
vector<vector<int>> graph;
vector<int> visited;
fstream fs;
}
여기서는 굳이 ofstream과 ifstream을 구분하진 않겠다.
3. open()메소드를 이용해 파일을 읽어와 그래프에 저장한다.
int main(){
int n;
int V;
vector<vector<int>> graph;
vector<int> visited;
// inputs
fstream fs;
fs.open("./test.txt", ios::in); // 여기서 텍스트 파일 경로 지정
if(!fs){ // if fails 읽기 실패시 Error 출력
cerr << "Error!\n";
}
fs >> n; // 형식이 정해져 있을 경우, >> 연산자를 사용 가능하다.
for(int i = 0; !fs.eof(); i++){
fs >> V;
graph.push_back({});
for(int j = 0; j < V; j++){
graph[i].push_back(0);
fs >> graph[i][j];
}
}
fs.close(); // 파일 스트림 닫아주기
// output - 그래프 정보 출력
cout << "Graph info - \n";
for(int i = 0; i < n; i++){
cout << "Vertex " << i+1 << " - ";
for(int j = 0; j < graph[i].size(); j++){
cout << graph[i][j] << " ";
}
cout << "\n";
}
return 0;
}
- 입력 파일 및 출력 결과
첫 번째 줄에는 그래프 정점의 개수 V가
두 번째 줄~ V+1번째 줄에는 연결된 정점의 개수와 정점의 번호가 입력된다.
4. 전체 코드
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main(){
int n;
int V;
vector<vector<int>> graph;
vector<int> visited;
// inputs
fstream fs;
fs.open("./test.txt", ios::in);
if(!fs){ // if fails
cerr << "Error!\n";
}
fs >> n;
for(int i = 0; !fs.eof(); i++){
fs >> V;
graph.push_back({});
for(int j = 0; j < V; j++){
graph[i].push_back(0);
fs >> graph[i][j];
}
}
fs.close();
// output
cout << "Graph info - \n";
for(int i = 0; i < n; i++){
cout << "Vertex " << i+1 << " - ";
for(int j = 0; j < graph[i].size(); j++){
cout << graph[i][j] << " ";
}
cout << "\n";
}
return 0;
}
LIST
'Programming Language > C, C++' 카테고리의 다른 글
[C++] 파일 입출력 - dfs [2] (0) | 2022.12.21 |
---|---|
[Quick Note] swap 함수를 구현하는 세 가지 방법 (C++) (0) | 2022.11.14 |
[C++] list 자료형 사용하기 - Quick Note (2) | 2022.09.23 |
[C++] int와 string 사이 형변환 방법 (0) | 2022.09.02 |