2013-08-01 2 views
14

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

#include <iostream> 
#include <vector> 

using namespace std; 

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

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

    return 0; 
} 

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

+0

Какое сообщение об ошибке? –

+6

Самая неприятная проблема синтаксического анализа. Избавьтесь от круглых скобок в объявлении 'myVector'. – Joel

+0

Да, это была моя точная проблема. и теперь я понимаю, что мне нужно использовать push_back! –

ответ

17

Вы должны использовать 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(); 

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

2

Применение push_back:

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

insert функция принимает итератора как первый аргумент, указывающий позицию вставки.

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

std::vector<float> myVector; 
+0

Проблема заключается в том, что я получаю следующее сообщение об ошибке всякий раз, когда я решаю использовать метод: «запрос на« push_back »в myVector, который относится к классу non-class std ::« –

+0

@AmberRoxanna Используйте 'std :: vector myVector ; 'вместо' std :: vector myVector(); ' – Yang

0

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

Смежные вопросы