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

47

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

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

但是这给我带来了错误信息。


什么是错误信息? - David Brown
6
最令人烦恼的语法分析问题。在声明myVector时去掉括号。 - Joel
是的,这正是我的问题。我现在明白了,我需要使用push_back,谢谢! - Amber Roxanna
5个回答

59

1
正如我的编辑所建议的那样,这个答案是错误的。你不需要使用push_back,你可以使用insert,这是显而易见的。 - metamorphosis

6
使用 push_back 函数:
while(cin >> x)
  myVector.push_back(x);
insert函数的第一个参数是迭代器,用于指示插入的位置。
此外,在声明myVector时需要去掉括号。
std::vector<float> myVector;

问题在于每当我决定使用一个方法时,我总是收到以下错误消息:“myVector中的'push_back'请求,该类型为非类类型std ::”。 - Amber Roxanna
@AmberRoxanna 使用std::vector<float> myVector;而不是std::vector<float> myVector(); - Yang

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

3

另一种选择是使用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);
}

2
以下代码可能会回答您的问题,并提供有关如何在不同位置或索引中插入新元素的其他示例。
请注意保留html标签。
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vector_of_integers{};

    vector_of_integers.push_back(1); // O(1)
    vector_of_integers.push_back(3); // O(1)
    vector_of_integers.push_back(5); // O(1)
    vector_of_integers.push_back(7); // O(1)

    for (int i = 8; i <= 10; i++)
        vector_of_integers.push_back(i);

    // Printing out all the elements of vector of integers - Method 1
    copy(vector_of_integers.begin(), vector_of_integers.end(), ostream_iterator<int>(cout, " ")); // 1 3 5 7 8 9 10
    cout << endl << endl;

    // Inserting '2' at index 1
    vector<int>::iterator it{ vector_of_integers.begin() };
    advance(it, 1);
    vector_of_integers.insert(it, 2); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 2
    for (auto const& element : vector_of_integers)
        std::cout << element << " "; // 1 2 3 5 7 8 9 10
    cout << endl << endl;

    // "it" no longer valid, get a new one
    it = vector_of_integers.begin();
    vector_of_integers.insert(it + 4, 6); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 3
    for (it = vector_of_integers.begin(); it != vector_of_integers.end(); it++)
        std::cout << *it << ' '; // 1 2 3 5 6 7 8 9 10
    cout << endl << endl;

    // insert '4' 7 times at index 3
    vector<int> new_vector_to_be_inserted(7, 4);
    vector_of_integers.insert(vector_of_integers.begin() + 3, new_vector_to_be_inserted.begin(), new_vector_to_be_inserted.end()); // O(N+M) => M is size of elements to be inserted

    // Printing out all the elements of vector of integers - Method 4
    for (int i = 0; i < vector_of_integers.size(); i++)
        cout << vector_of_integers.at(i) << ' '; // 1 2 3 4 4 4 4 4 4 4 5 6 7 8 9 10
    cout << endl << endl;

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接