41

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

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

但这给了我错误消息。

4

4 回答 4

51

您需要std::vector::push_back()改用:

while(cin >> x)
  myVector.push_back(x);
//         ^^^^^^^^^

而 not std::vector::insert(),正如您在链接中看到的那样,它需要一个迭代器来指示您要插入元素的位置。

此外,正如@Joel 所评论的那样,您应该删除向量变量定义中的括号。

std::vector<float> myVector;

不是

std::vector<float> myVector();

通过执行后者,您会遇到 C++最令人头疼的解析问题。

于 2013-08-01T02:31:39.070 回答
4

使用push_back

while(cin >> x)
  myVector.push_back(x);

insert函数将迭代器作为第一个参数,指示要插入的位置。

此外,您需要去掉声明中的括号myVector

std::vector<float> myVector;
于 2013-08-01T02:29:55.360 回答
3

myVector.insert()用就用就好myVector.insert(myVector.end(), x)。这将在 myVector 的末尾附加 x。您可以在开头插入 x myVector.insert(myVector.begin(), x)

于 2018-01-29T04:21:23.743 回答
2

另一种选择是使用std::vector::emplace_back()而不是std::vector::push_back(). 进行了一些优化并且不采用 type 的参数vector::value_type,它采用可变参数,这些参数被转发给附加项的构造函数,同时push_back可以进行不必要的复制或移动。

这在std::vector::emplace_back文档中得到了证明,是一个相关的问题。

使用示例:

std::vector<int> myVector;

while (cin >> x) {
    myVector.emplace_back(x);
}
于 2018-12-02T15:52:14.790 回答