IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

[STL] la fonction "push_back" [Débutant(e)]


Sujet :

SL & STL C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut [STL] la fonction "push_back"
    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

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    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

  3. #3
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    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.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par MatRem
    (snip)

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

  5. #5
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Je viens de regarder vite fait "Le langage c++" qui parle de ça :

    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.
    a étant le conteneur à modifier et temp un conteneur temporaire de travail.


    De plus dans le tableau p1062, on voit que :
    push_back garanti que le conteneur est inchangé en cas d'exception.
    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().
    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 .

Discussions similaires

  1. Fonction Replace pour quote
    Par piero53 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/11/2009, 01h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo