Cum se adaugă elemente la un vector gol într-o buclă? (Programare, C++, Vector, Insert)

Amber Roxanna a intrebat.

Încerc să creez un vector gol în interiorul unei bucle și vreau să adaug un element la vector de fiecare dată când se citește ceva în acea buclă.

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

Dar acest lucru îmi dă mesaje de eroare.

Comentarii

  • Care este mesajul de eroare? –  > Por David Brown.
  • Cea mai supărătoare problemă de parse. Eliminați parantezele din declarația lui myVector. –  > Por Joel.
  • da, aceasta a fost exact problema mea. și acum am înțeles că trebuie să folosesc push_back, mulțumesc! –  > Por Amber Roxanna.
4 răspunsuri
Mark Garcia

Trebuie să utilizați std::vector::push_back() în loc:

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

și nu std::vector::insert(), , care, după cum se poate vedea în link, are nevoie de un iterator pentru a indica poziția în care vrei să inserezi elementul.

De asemenea, așa cum a comentat @Joel, ar trebui să elimini parantezele din definiția variabilei tale vectoriale.

std::vector<float> myVector;

și nu

std::vector<float> myVector();

Făcând aceasta din urmă, vă loviți de problema din C++ cel mai enervant Parse din C++ problemă.

Comentarii

  • După cum a sugerat editarea mea, acest răspuns este greșit. Nu este nevoie să folosiți push_back, ci puteți. Puteți folosi insert, așa cum este evident. –  > Por metamorfoză.
Yang

Utilizați push_back:

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

The insert primește ca prim argument un iterator, indicând poziția de inserat.

De asemenea, trebuie să scăpați de parantezele din declarația lui myVector:

std::vector<float> myVector;

Comentarii

  • Problema este că primesc în continuare următorul mesaj de eroare de fiecare dată când decid să folosesc o metodă: „request for ‘push_back’ in myVector which is of non-class type std:::” –  > Por Amber Roxanna.
  • @AmberRoxanna Use std::vector<float> myVector; în loc de std::vector<float> myVector(); –  > Por Yang.
Nikunj

Dacă doriți să utilizați myVector.insert(), , folosiți-l ca myVector.insert(myVector.end(), x). Acest lucru va adăuga x la sfârșitul lui myVector.Puteți introduce x la început prin myVector.insert(myVector.begin(), x).

J-Alex

O altă opțiune este de a utiliza std::vector::emplace_back() în loc de std::vector::push_back(). The face unele optimizări și nu acceptă un argument de tip vector::value_type, , ia argumente variadice care sunt transmise către constructorul elementului anexat, în timp ce push_back poate face copii sau mișcări inutile.

Acest lucru este demonstrat în exemplul std::vector::emplace_back și iată o întrebare legată de aceasta.

Exemplu de utilizare:

std::vector<int> myVector;

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