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

你可以从一个大小的向量开始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 回答