如何在矢量向量上推迟?

时间:2013-03-18 19:03:30

标签: c++ vector

我正在接受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 个答案:

答案 0 :(得分:13)

代码是正确的,但您的向量中包含零元素,因此您无法访问big[i]

在构造函数中设置循环前的向量大小,或者像这样:

big.resize(ruleNum);

或者,您可以在每个循环步骤中推送空向量:

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

big[i]周围的括号也不需要。

答案 1 :(得分:5)

哟可以从大小为ruleNum

的向量开始
vector <vector<string> > big(ruleNum);

这将保留ruleNum个空vector<string>元素。然后,您可以将元素推回到每个元素中,就像您在发布的示例中所做的那样。

答案 2 :(得分: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);
}

答案 3 :(得分:2)

              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);