如何在循环中向空向量添加元素?

时间:2013-08-01 02:29:05

标签: c++ vector insert

我正在尝试在循环中创建一个空向量,并希望每次将某个元素读入该循环时向该向量添加一个元素。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
   std::vector<float> myVector();

   float x;
   while(cin >> x)
      myVector.insert(x);

   return 0;
}

但是这给了我错误消息。

4 个答案:

答案 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