2016-10-19 17 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

ありがとうございました。 :)愚かな間違い。 –

関連する問題