我正在尝试在循环中创建一个空向量,并希望每次将某个元素读入该循环时向该向量添加一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<float> myVector();
float x;
while(cin >> x)
myVector.insert(x);
return 0;
}
但是这给了我错误消息。
答案 0 :(得分:28)
您需要使用std::vector::push_back()
代替:
while(cin >> x)
myVector.push_back(x);
// ^^^^^^^^^
而不是std::vector::insert()
,正如您在链接中看到的那样,需要一个迭代器来指示您想要插入元素的位置。
此外,作为what @Joel has commented,您应该删除矢量变量定义中的括号。
std::vector<float> myVector;
和不
std::vector<float> myVector();
通过执行后者,您会遇到C ++的Most Vexing Parse问题。
答案 1 :(得分:2)
使用push_back
:
while(cin >> x)
myVector.push_back(x);
insert
函数将迭代器作为第一个参数,指示要插入的位置。
此外,您需要删除myVector
声明中的括号:
std::vector<float> myVector;
答案 2 :(得分:1)
如果您想使用myVector.insert()
,
像myVector.insert(myVector.end(), x)
一样使用它。这将在myVector的末尾附加x。
您可以在myVector.insert(myVector.begin(), x)
开头插入x。
答案 3 :(得分:0)
另一种选择是使用BottomNavigationBar
而不是std::vector::emplace_back()
。进行了一些优化,并且不采用类型std::vector::push_back()
的参数,它采用了可变参数,这些参数被转发到附加项的构造函数,而vector::value_type
可以进行不必要的复制或移动。
std::vector::emplace_back文档中对此进行了说明,here是一个相关的问题。
用法示例:
push_back