web-dev-qa-db-fra.com

comment puis-je ajouter des éléments à un vecteur vide dans une boucle?

J'essaie de créer un vecteur vide à l'intérieur d'une boucle et souhaite ajouter un élément au vecteur chaque fois que quelque chose est lu dans cette boucle.

#include <iostream>
#include <vector>

using namespace std;

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

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

   return 0;
}

mais cela me donne des messages d'erreur.

19
Amber Roxanna

Utilisez Push_back :

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

La fonction insert prend un itérateur comme premier argument, indiquant la position à insérer.

En outre, vous devez vous débarrasser des parenthèses dans la déclaration de myVector:

std::vector<float> myVector;
2
Yang

Si vous voulez utiliser myVector.insert(), Utilisez-le comme myVector.insert(myVector.end(), x). Ceci ajoutera x à la fin de myVector . Vous pouvez insérer x au début par myVector.insert(myVector.begin(), x).

1
Nikunj

Une autre option consiste à utiliser std::vector::emplace_back() au lieu de std::vector::Push_back(). Le fait quelques optimisations et ne prend pas un argument de type vector::value_type, il prend des arguments variés qui sont transmis au constructeur de l'élément ajouté, alors que Push_back peut effectuer des copies ou des mouvements inutiles. 

Ceci est démontré dans la documentation std :: vector :: emplace_back et ici est une question connexe.

Exemple d'utilisation:

std::vector<int> myVector;

while (cin >> x) {
    myVector.emplace_back(x);
}
0
J-Alex