【问题标题】:How do I add elements to an empty vector in a loop?如何在循环中将元素添加到空向量?
【发布时间】:2013-08-01 19:09:35
【问题描述】:

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

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

但这给了我错误消息。

【问题讨论】:

  • 错误信息是什么?
  • 最令人头疼的解析问题。去掉myVector声明中的括号。
  • 是的,这正是我的问题。我现在明白我需要使用 push_back 谢谢!

标签: c++ vector insert


【解决方案1】:

您需要改用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 问题。

【讨论】:

  • 正如我的编辑所建议的,这个答案是错误的。你不需要使用push_back,你可以。很明显,您可以使用插入。
【解决方案2】:

使用push_back:

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

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

另外,你需要去掉myVector声明中的括号:

std::vector<float> myVector;

【讨论】:

  • 问题是,每当我决定使用方法时,我都会不断收到以下错误消息:“在 myVector 中请求非类 std:: 中的‘push_back’”
  • @AmberRoxanna 使用std::vector&lt;float&gt; myVector; 而不是std::vector&lt;float&gt; myVector();
【解决方案3】:

如果你想使用myVector.insert(), 像myVector.insert(myVector.end(), x) 一样使用它。这将在 myVector 的末尾附加 x。 您可以通过myVector.insert(myVector.begin(), x)在开头插入x。

【讨论】:

    【解决方案4】:

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

    std::vector::emplace_back 文档中对此进行了演示,here 是一个相关问题。

    使用示例:

    std::vector<int> myVector;
    
    while (cin >> x) {
        myVector.emplace_back(x);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      相关资源
      最近更新 更多