2016-08-28 9 views
2

私は、15列と1000行以上の値を持つファイルを持っています。複数の列を読み込み、ベクトルでC++に入れてください

45285785.00 45285797.00 45285776.00 45285795.00 45285785.00 45285803.00 45285769.00 45285773.00 45285771.00 45285795.00 45285771.00 45285798.00 45285796.00 45285797.00 45285753.00 
35497405.00 35497437.00 35497423.00 35497465.00 35497463.00 35497468.00 35497437.00 35497481.00 35497417.00 35497479.00 35497469.00 35497454.00 35497442.00 35497467.00 35497482.00 
46598490.00 46598483.00 46598460.00 46598505.00 46598481.00 46598480.00 46598477.00 46598485.00 46598494.00 46598478.00 46598482.00 46598495.00 46598491.00 46598491.00 46598476.00 

このファイルをお読みください。私が今やっているやり方は、15の変数を取って、それらをベクトルに個別に入れることです。

double col1, col2, ... , col15; 
vector <double> C1, C2, ..., C15; 
ifstream input('file'); 
while(input >> col1 >> col2 >> ... >> col15) 
{ 
    C1.push_back(col1); 
    C2.push_back(col2); 
    ... 
    C15.push_back(col15); 
} 

これを行うより良い方法はありますか?私は、15の変数を定義せずに、whileループで15列を読み込むことを意味しますか?

+2

のあなたは、あなたのコードの場合を改善する方法についてのアドバイスを[コードレビュー](http://codereview.stackexchange.com)をチェックアウトする必要がありますあなたは何の誤りもありません。 – Swemoph

答えて

3

はい、あります。

あなたのすべてのcolのコンテナを考えることができます。 vector<double> cols(15)を入力し、C1, C2 ... C15の変数をベクトルベクトルで置き換えます。そして、あなたは簡単にかなっ好きでした:あなたはを読むのを止めなければならないとき

for(int i=0; i<cols.size(); ++i) { 
    input >> cols[i]; 
    C[i].push_back(cols[i]); 
} 

ただし、この場合には、あなたはを知りません。これを修正するには、input.eof()またはinput.good()のいずれかのメソッドを使用するか、fstream >>の演算子の戻り値を前のコードと同じようにキャッチしてください。

0

はい、現在行っていることよりも良い方法があります。

タイプdoubleの2-Dベクトルを宣言する必要があります。

vector<vector<double> > C; 

for(int i = 0; i < cols.size(); i++) { 
    input >> cols[i]; 
    C[i].push_back(cols[i]); 
} 
0

もう1つの「ベクトルまたはベクトル」ベースの例(この場合、ベクトルの配列)。 while

(あなたがinput >> val結果を確認することができます)の代わりにfor

#include <array> 
#include <vector> 
#include <fstream> 


int main() 
{ 
    double val; 

    std::array<std::vector<double>, 15> C; 

    std::ifstream input("file"); 

    std::size_t ind { 0 }; 

    while (input >> val) 
    { 
     C[ind++].push_back(val); 

     if (ind == C.size()) 
     ind = 0U; 
    } 

    if (ind != 0U) 
     ; // do something ? 

    return 0; 
} 
関連する問題