как добавить элементы в пустой вектор в цикле?

Я пытаюсь создать пустой вектор внутри цикла и хочу добавлять элемент к вектору каждый раз, когда что-то читается в этом цикле.

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

но это дает мне сообщения об ошибках.

Ответ 1

Вместо этого вам нужно использовать std::vector::push_back():

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

а не std::vector::insert(), который, как вы видите в ссылке, нуждается в итераторе, чтобы указать позицию, в которую вы хотите вставить элемент.

Кроме того, как комментирует @Joel, вы должны удалить круглые скобки в определении векторной переменной.

std::vector<float> myVector;

и не

std::vector<float> myVector();

Делая последнее, вы сталкиваетесь с проблемой C++ Most Vexing Parse.

Ответ 2

Использовать push_back:

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

Функция insert принимает итератор в качестве первого аргумента, указывая позицию для вставки.

Кроме того, вам нужно избавиться от круглых скобок в объявлении myVector:

std::vector<float> myVector;

Ответ 3

Если вы хотите использовать myVector.insert(), используйте его как myVector.insert(myVector.end(), x). Это добавит x в конец myVector. Вы можете вставить x в начале myVector.insert(myVector.begin(), x).

Ответ 4

Другой вариант - использовать std::vector::emplace_back() вместо std::vector::push_back(). vector::value_type некоторые оптимизации и не принимает аргумент типа vector::value_type, он принимает переменные аргументы, которые перенаправляются в конструктор добавленного элемента, а push_back может делать ненужные копии или движения.

Это проявляется в станд :: вектор :: emplace_back документации и здесь есть связанный с этим вопрос.

Пример использования:

std::vector<int> myVector;

while (cin >> x) {
    myVector.emplace_back(x);
}