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!
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].
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.