12

私は20行の入力を取っています。各行の内容をスペースで区切り、ベクトルのベクトルに入れたいです。ベクトルのベクトルを作成するにはどうすればよいですか? 私はそれを押し戻すのに苦労しています...

私の入力ファイル:

Mary had a little lamb
lalala up the hill
the sun is up

ベクトルは次のようになります。

ROW 0: {"Mary","had", "a","little","lamb"}
ROW 1: {"lalala","up","the","hill"}

これは私のコードです....

string line; 
vector <vector<string> > big;
string buf;
for (int i = 0; i < 20; i++){
    getline(cin, line);
    stringstream ss(line);

    while (ss >> buf){
        (big[i]).push_back(buf);
    }
}
4

4 に答える 4

13

コードは正しいですが、ベクトルには要素が含まれていないため、 にアクセスできませんbig[i]

コンストラクターまたは次のように、ループの前にベクトル サイズを設定します。

big.resize(ruleNum);

別の方法として、各ループ ステップで空のベクターをプッシュすることもできます。

big.push_back( vector<string>() );

括弧も必要ありませんbig[i]

于 2013-03-18T19:06:45.567 に答える
5

Yoはサイズのベクトルから始めることができますruleNum

vector <vector<string> > big(ruleNum);

これはruleNumvector<string>の要素を保持します。その後、投稿した例で現在行っているように、要素をそれぞれにプッシュバックできます。

于 2013-03-18T19:05:55.633 に答える
4

次のことができます。

string line; 
vector <vector<string> > big;  //BTW:In C++11, you can skip the space between > and >

string currStr;
for (int i = 0; i < ruleNum; i++){
    getline(cin, line);
    stringstream ss(line);
    vector<string> buf;
    while (ss >> currStr){
       buf.push_back(buf);
    }
    big.push_back(buf);
}
于 2013-03-18T19:07:54.987 に答える
3
              vector<vector<string> > v;

ベクトルのベクトルに push_back するには、内部ベクトルで文字列を push_back し、内部ベクトルを外部ベクトルに push_back します。

その実装を示す簡単なコード:

vector<vector<string> > v;
vector<string> s;

s.push_back("Stack");
s.push_back("oveflow");`
s.push_back("c++");
// now push_back the entire vector "s" into "v"
v.push_back(s);
于 2015-07-27T08:24:33.723 に答える