Hoe voeg ik elementen toe aan een lege vector in een lus?

Ik probeer een lege vector in een lus te maken en wil elke keer dat er iets in die lus wordt ingelezen een element aan de vector toevoegen.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
   std::vector<float> myVector();
   float x;
   while(cin >> x)
      myVector.insert(x);
   return 0;
}

Maar dit geeft me foutmeldingen.


Antwoord 1, autoriteit 100%

Je moet std::vector::push_back()in plaats daarvan:

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

en niet std::vector::insert(), die, zoals je in de link kunt zien, een iterator nodig heeft om de positie aan te geven waar je het element wilt invoegen.

Ook als wat @Joel heeft becommentarieerd, moet u de haakjes in de definitie van uw vectorvariabele verwijderen.

std::vector<float> myVector;

en niet

std::vector<float> myVector();

Als je dat laatste doet, loop je tegen het Meest irritante parse-probleem van C++ aan.


Antwoord 2, autoriteit 9%

Met push_back:

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

De insertfunctie heeft een repeater als eerste argument, die de positie om de insert.

Ook, moet u zich te ontdoen van de haakjes in de verklaring van myVector

std::vector<float> myVector;

Antwoord 3, Autoriteit 6%

Als u gebruik wilt maken myVector.insert(),
gebruik het als myVector.insert(myVector.end(), x). Dit zal x voegen eind myVector.
U kunt invoegen x in het begin door myVector.insert(myVector.begin(), x).


Antwoord 4, Autoriteit 4%

Een andere optie is om gebruik te maken std::vector::emplace_back()in plaats van std::vector::push_back(). Het maakt een aantal optimalisaties en niet een argument van het type te nemen vector::value_type, duurt variadic argumenten die worden doorgestuurd naar de bouwer van de bijgevoegde artikel, terwijl push_backblikje maken onnodige kopieën of bewegingen.

Dit wordt aangetoond in de std :: vector :: emplace_back documentatie en hier is een verwante vraag.

Gebruiksvoorbeeld:

std::vector<int> myVector;
while (cin >> x) {
    myVector.emplace_back(x);
}

Other episodes