2013-08-01 17 views
14

Próbuję utworzyć pusty wektor wewnątrz pętli i chcę dodać element do wektora za każdym razem, gdy coś zostanie wczytane do tej pętli.Jak dodać elementy do pustego wektora w pętli?

#include <iostream> 
#include <vector> 

using namespace std; 

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

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

    return 0; 
} 

ale to daje mi komunikaty o błędach.

+0

Co to jest komunikat o błędzie? –

+6

Najczęściej problem z analizą zniekształceń. Pozbądź się nawiasów w deklaracji 'myVector'. – Joel

+0

tak, to był mój dokładny problem. i teraz rozumiem, że muszę używać funkcji push_back dzięki! –

Odpowiedz

17

Trzeba użyć std::vector::push_back() zamiast:

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

a nie std::vector::insert(), który, jak można zobacz w łączu, potrzebuje iteratora, aby wskazać położenie, w którym chcesz wstawić element.

Ponadto, jako what @Joel has commented, należy usunąć nawiasy w definicji zmiennej wektorowej.

std::vector<float> myVector; 

i nie

std::vector<float> myVector(); 

Robiąc ten ostatni, napotkasz Most Vexing Parse problemu C++ 's.

2

Zastosowanie push_back:

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

Funkcja insert wykonuje iterację jak pierwszy argument, wskazując miejsce do wstawienia.

Ponadto, trzeba pozbyć się nawiasów w Deklaracji myVector:

std::vector<float> myVector; 
+0

Problem polega na tym, że wciąż otrzymuję następujący komunikat o błędzie za każdym razem, gdy zdecyduję się użyć metody: "request for 'push_back" w myVector, która jest klasy innej niż std :: " –

+0

@AmberRoxanna Użyj' std :: vector myVector ; 'zamiast' std :: vector myVector(); ' – Yang

0

Jeśli chcesz użyć myVector.insert(), użyj go jak myVector.insert(myVector.end(), x). To doda x na końcu myVector. Możesz wstawić x na początku przez myVector.insert(myVector.begin(), x).

Powiązane problemy