std :: vector的push_back方法没有将第二个控制台输入放在v [1]槽中,它会在v [0]
中覆盖它我试图寻找其他答案,但代码和答案对我来说太复杂了,我试图保持简单(但我尝试使用指针,只是有一堆错误)
我的方法:
vector<string> createtable(std::vector<std::string> v, std::string insertedstr) {
std::vector<std::string> vcreate;
vcreate.push_back(insertedstr + " ");
return vcreate;
}
主要
int main()
{
int option;
std::string insertedstr;
std::vector<std::string> v;
cin >> insertedstr;
v = createtable(v, insertedstr);
for (int i = 0; i <=v.size(); i++) {
cout << v[i] << endl;
}
cin >> insertedstr;
v = createtable(v, insertedstr);
for (int i = 0; i <= v.size(); i++) {
cout << v[i] << endl;
}
return 0;
}
编辑:我想最终为此编写一个菜单,所以我想拥有无限量的push_backs,所以只是在main中调用v.push_back对我不起作用
如果有人能提供帮助,会很棒。
答案 0 :(得分:2)
您在每次调用vector
时都会创建新的createTable
,而不会重复使用现有的vector
;你没有经常插入v[0]
,你不断用一个只有一个元素的全新向量替换v
。第二次拨打createTable
可能只是直接拨打v.push_back(insertedString);
。
或者,删除vcreate
声明并实际使用传递给函数的v
(这仍然是浪费,因为它不断复制和替换vector
而不是推送到现有的,但它至少在逻辑上是正确的。)
答案 1 :(得分:1)
你永远不会真正把第二个输入写入任何东西。 Push_back只被调用一次(在v = createtable(v, insertedstr);
调用的函数内),因此它只包含一个值。你需要实际调用带有第二个值的push_back进入向量。
答案 2 :(得分:0)
vector<string> createtable(std::vector<std::string> v, std::string insertedstr) {
//std::vector<std::string> vcreate; // Not required
v.push_back(insertedstr + " ");
return v;
}
问题出在这个功能上。您每次都在创建新的向量vcreate
,而不是使用传递的向量v
。因此,每次都会有大小为1的新向量。