slt ,
je debute avec le builder c++ , et j'ai trouvé la fonction "push_back()" , je voudrais savoir que fait cette fonction au juste ( j'ai pas trouvé d'indication dans le help du builder )
merci
slt ,
je debute avec le builder c++ , et j'ai trouvé la fonction "push_back()" , je voudrais savoir que fait cette fonction au juste ( j'ai pas trouvé d'indication dans le help du builder )
merci
Salut,
C'est bien simple: elle introduit l'élément passé en parametre apres le dernier élément trouvé dans le conteneur.
Selon les circonstances (type de conteneur, capacité maximale actuelle du conteneur et nombre actuel d'éléments dans le conteneur) elle pourra provoquer l'allocation dynamique d'espace supplémentaire en vue de recevoir ce conteneur.
Je *presumes* qu'en cas d'échec elle devrait au minimum lancer une exception de type runtime_error, mais cela reste à vérifier
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
D'après http://www.sgi.com/tech/stl/
push_back est une fonction des conteneurs de type back_insertion, (vector, list, deque).
Toujours d'après ce document c'est équivalent à a.insert(a.end(), t) à part que push_back ne renvoi rien.
Par contre je ne vois pas qu'il est question d'exception... Sans doute qu'il est toujours possible d'ajouter un élément... à part en cas de manque de mémoire, ou il pourrait y avoir une exception bad_alloc.
A vrai dire, c'est effectivement en cas de manque de mémoire que j'envisage qu'elle devrait renvoyer une exception... quant à savoir si (pour autant que cela aie été fait) l'exception est de type bad_alloc ou si elle est considérée comme une erreur à l'exécution...Envoyé par MatRem
les deux seraient envisageables, à défaut de savoir ce que prévoit la norme
![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Je viens de regarder vite fait "Le langage c++" qui parle de ça :
a étant le conteneur à modifier et temp un conteneur temporaire de travail.
E.3.4 push_back (p1053)
Du point de vue de la gestion sécurisée de exceptions, push_back est analogue à l'affectation...
...
E.3.3 Affectation (p1053)
...
Si la mémoire disponible est insuffisante pour la création de temp avec b.size éléments, std::bad_alloc est déclenchée avant que a soit modifié. De même, si push_back échoue pour une raison quelcquonque, a reste inchangé parceque nous appliquons push_back à temp plutôt qu'à a. Dans ce cas, tout élément de temp créé par push_back sera détruit avant que l'exception à l'origine de l'interruption soit redéclenchée.
De plus dans le tableau p1062, on voit que :
Donc ce que je comprends, c'est que quelque soit l'exception qui se produit le conteneur ne sera pas modifié car il la capte proprement, et cette exception sera renvoyée par push_back().push_back garanti que le conteneur est inchangé en cas d'exception.
Et ces exceptions sont :
- soit externes à la STL (dûes au code client);
- soit bad_alloc en cas de manque de mémoire.
... par contre j'ai survolé ces quelques parties (un peu longues à lire), donc j'ai peut être loupé quelquechose.
Partager