2016-10-19 18 views
0

테이블 형식으로 값을 포함하는 파일이 있습니다. 파일의 행과 열의 수는 다를 수 있습니다.2 차원 벡터의 분할 오류

33829731.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 
205282038.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 
3021548.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 
203294496.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 
205420417.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 

다음 코드를 사용하여 2 차원 벡터를 사용하여 데이터를 저장하고 있습니다.

ifstream inputCent("file.txt"); 

std::vector<std::vector<double> > C; 
std::vector<double> col(15); 

while(!inputCent.eof()) 
{ 
    for(int i = 0; i < col.size(); i++) 
    { 
     inputCent >> col[i]; 
     C[i].push_back(col[i]); 
    } 
} 

그러나 이것은 Segmentation fault: 11입니다. 그러나 만약 내가 std::vector<std::vector<double> > C(15);이 다음 15 행에 대한 작동처럼 초기화하십시오. 하지만 내가 말했듯이 행의 수가 다를 수 있습니다. C 크기를 초기화해야하는 이유는 무엇입니까? 아니면 내가 뭘 잘못 했니?

답변

2

당신은 존재하지 않을 수 있습니다 벡터에 push_back에 노력하고 ... 올바른 코드는 다음과 같습니다 : 위와 같이

ifstream inputCent("file.txt"); 

std::vector<std::vector<double> > C; 
std::vector<double> col(15); 

while(!inputCent.eof()) 
{ 
    for(int i = 0; i < col.size(); i++) 
    { 
     inputCent >> col[i]; 
    } 
    C.push_back(col); 
} 

, 그것은 밀어 전에 값으로 col 벡터를 채우는 데 더 의미 전체colC의 뒷면에 벡터.

+0

알겠습니다. 감사합니다. :) 바보 같은 실수. –