2016-10-19 64 views
0

我有一个包含表格格式值的文件。文件中的行数和列数可能会有所不同。二维矢量上的分割错误

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 

我正在使用二维向量来存储使用以下代码的数据。

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矢量整个col矢量到C的背面。

+0

明白了,谢谢。 :)愚蠢的错误。 –