2012-07-23 3 views
2

제 문제는 텍스트 파일에 2 차원 벡터를 쓰는 방법입니다.2 차원 벡터를 텍스트 파일로 저장

나는 이미 조금 내 필요에 내 코드 변경 여기에 주제 here를 따라 :

ofstream output_file("example.txt"); 
ostream_iterator<int> output_iterator(output_file, "\t"); 
for (int i = 0 ; i < temp2d.size() ; i++) 
copy(temp2d.at(i).begin(), temp2d.at(i).end(), output_iterator); 

내 질문에 행하여 파일 행 벡터를 작성하는 방법입니까? 그래서

22 33 44 
66 77 88 
88 44 22 

과 :

이 제가 원하는 것입니다.

이 코드는 벡터의 모든 요소를 ​​같은 줄에 씁니다.

감사합니다.

+0

temp2d 선언을 보여주십시오. – steffen

+0

@steffen 벡터 > temp2d; –

답변

1

밖으로 인쇄 루프에 대한 당신의 말에, 즉 당신이 행을 복사 한 후 새 줄 문자 :

for(...) 
{ 
    : // other code 
    output_file << '\n'; 
} 
+2

그리고 좀 더 안전하게하고 출력이 파일로 플러시되도록하려면 평범한 개행 대신'std :: endl'을 사용하십시오. –

+0

감사합니다 님과 조아킴, 마침내 작동합니다! –

+0

@JoachimPileborg 필자는 각각의 새로운 라인을 플러시하는 것이 정말 불편할 것입니다. 출력이 불필요하게 느려질 것입니다. std :: streams는 수명이 끝났을 때 플러시됩니다. 그래서 같은 글자에서 읽고 쓰지 않는 한 얻을 수있는 것은 없습니다. 흐름. – 111111

1

나는 당신과 같은 C++ (11) 당신이 할 수있는 일이 있습니다

std::vector<std::vector<int> > v; 

//do with v; 

for(const auto& vt : v) { 
    std::copy(vt.cbegin(), vt.cend(), 
      std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << '\n'; 
} 

기타 현명한 typdefs는 친구입니다. gcc --std=c++0x test_vector.cc

#include <vector> 
#include <iostream> 

int main(){ 
    std::vector<std::vector<int> > vec; 

    /* fill the vector ... */ 

    for(const auto& row : vec) { 
    std::copy(row.cbegin(), row.cend(), std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << '\n'; 
    } 

    return 0; 
} 

컴파일 :

typedef std::vector<int> int_v; 
typedef std::vector<int_v> int_mat; 
int_mat v; 

for(int_mat::const_iterator it=v.begin(); it!=v.end(); ++it) { 
    std::copy(vt->begin(), vt->end(), 
      std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << '\n'; 
} 
1

하나의 방법입니다 그.

관련 문제