我正在尝试开发对二维字符串向量的理解(即向量内的向量),经过几个小时的努力,我似乎无法增加外向量的大小。
我首先将以下值添加到第一个内部元素{“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);
我误解的是什么?如何增加矢量的大小,从而继续添加数据?
非常感谢,
何
答案 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
。