1

次の形式のデータを含む .txt ファイルがあります。

1.23,2.34,3.45
4.56,5.67,6.78

ベクトルに数値を挿入する方法

vector[1]={1.23,4.56,...}
vector[2]={2.34,5.67,...}
vector[3]={3.45,6.78,...}

コード

ifstream in("data.txt");
vector<vector<int> > v;

if (in) {
    string line;
    while (getline(in,line)) {
        v.push_back(std::vector<int>());
        stringstream split(line);
        int value;
        while (split >> value)
            v.back().push_back(value);
    }
}
4

1 に答える 1

0

コード内の複数の問題

  1. あなたの内側はのまたは代わりにのvectorはずです。vectorfloatdoubleint

  2. あなたのvalue変数はまた、floatまたはである必要がありますdouble

  3. 読み取り中に区切り記号 (カンマ) を通過する必要があります。

  4. 各行にある値と同じ数の内部ベクトルを作成する必要があります。以下では、ブールfirst変数を使用してこれを行いました。これを使用して、最初の行を読み取るときにのみベクトルを作成するようにします。

  5. 内部ベクトル to push_backto のインデックスは、プッシュ バックされる行の値の列番号と同じです。変数を使用してcol、現在行で読み取られている列番号を把握します。

列の数と同じ数の内部ベクトルが必要です。各内部ベクトルには、ファイル内の行数と同じ数のメンバーがあります。

ifstream in("data.txt");
vector<vector<double> > v;

bool first = false;
if (in) 
{
    string line;
    while (getline(in,line)) 
    {
        istringstream split(line);
        double value;
        int col = 0;
        char sep;

        while (split >> value)
        {
            if(!first)
            {
                // Each new value read on line 1 should create a new inner vector
                v.push_back(std::vector<double>());
            }

            v[col].push_back(value);
            ++col;

            // read past the separator                
            split>>sep;
        }

        // Finished reading line 1 and creating as many inner
        // vectors as required            
        first = true;
    }

}
于 2013-07-07T14:29:10.720 に答える