c ++ - 增加二维字符串向量

时间:2016-04-26 23:31:41

标签: c++ arrays multidimensional-array vector

我正在尝试开发对二维字符串向量的理解(即向量内的向量),经过几个小时的努力,我似乎​​无法增加外向量的大小。

我首先将以下值添加到第一个内部元素{“ABC”,“Abacus”,“Abacus Football Club”,“001”}。

然后我想添加另一个外部元素并添加“BCD”作为第一个值。经过多次尝试失败后,我无法增加外部矢量的大小。我提出下面的内容,我觉得这是我最接近的。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{

    vector< vector<string> > vecTeams(1, vector<string>(4)); 

    vecTeams[0][0] = "ABC";
    vecTeams[0][1] = "Abacus";
    vecTeams[0][2] = "Abacus Football Club";
    vecTeams[0][3] = "001";

    cout << vecTeams[0][1] << endl; 

    vecTeams.push_back(1); 
    vecTeams[1][0] = "BCD"; 

    cout << vecTeams[1][0] << endl;

    return 0; 
}

尝试编译时不喜欢:

vecTeams.push_back(1); 

我误解的是什么?如何增加矢量的大小,从而继续添加数据?

非常感谢,

2 个答案:

答案 0 :(得分:2)

由于vecTeams是一个包含std::vector<std::string> s的容器,因此从逻辑上讲,这是您需要添加的容器:

vecTeams.push_back(std::vector<std::string>()); 

push_back()的参数是要添加到容器末尾的新值,而不是要添加到容器的新值的数量。由于容器包含std::vector<std::string>,因此您必须构造一个新容器并将其推回。

您也可以使用resize()来完成同样的事情:

vecTeams.resize(2);

现在,容器中有两个元素。

答案 1 :(得分:1)

push_back的参数是推送的向量。 1不是矢量。

您可以使用:

vecTeams.push_back( vector<string>(4) );

或者也许:

vecTeams.resize(2);
vecTeams[1].resize(4);

或者你可以在推送之前创建每一行:

vector< vector<string> > vecTeams;
vector<string> team;

team = { "ABC", "Abacus", "Abacus Football Club", "001" };
vecTeams.push_back(team);

team = { "BCD", "bla", "bla", "002" };
vecTeams.push_back(team);

事实上,您在此代码中甚至不需要team,您可以将支持列表直接放在push_back调用中。

如果每行中都包含4个字符串,请考虑使用std::array<string, 4>作为行类型,​​或struct