web-dev-qa-db-fra.com

Utiliser C ++ vector :: insert () pour ajouter à la fin du vecteur

J'écris un petit morceau de code où je devrai insérer des valeurs dans un vecteur C++ STL à un certain endroit en fonction des valeurs dans les éléments vectoriels. J'utilise la fonction insert() pour accomplir cela. Je me rends compte que lorsque je veux ajouter un nouvel élément à la fin du vecteur, je pourrais simplement utiliser Push_back(). Mais pour garder mon code beau, je voudrais utiliser exclusivement insert(), qui prend en entrée l'itérateur pointant vers l'élément après le point d'insertion souhaité et la valeur à insérer. Si la valeur de l'itérateur passé en argument est v.end(), où v est mon vecteur, cela fonctionnera-t-il de la même manière que Push_back()?

Merci beaucoup!

53

a.Push_back(x) est défini pour avoir une sémantique identique à (void)a.insert(a.end(),x) pour les conteneurs de séquence qui le prennent en charge.

Voir le tableau 68 dans ISO/IEC 14882: 2003 23.1.1/12 [lib.sequence.reqmts].

91
CB Bailey

Il y a une légère différence que Push_back Renvoie void que insert renvoie iterator à l'élément qui vient d'être inséré.

Soit dit en passant, il existe une autre façon de vérifier s'ils font la même chose: compiler les codes suivants

int main()
{
    std::vector<int const> v;
    v.Push_back(0);
    return 0;
}

le compilateur affichera beaucoup de messages ennuyeux, lisez simplement et vous trouverez Push_back appels insert (sinon, essayez de compiler v.insert(v.end(), 0) pour voir s'ils appellent la même insertion fonction) à la fin.

15
neuront