как добавить элементы в пустой вектор в цикле?
Я пытаюсь создать пустой вектор внутри цикла и хочу добавлять элемент к вектору каждый раз, когда что-то читается в этом цикле.
#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);
}