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

Langage C++ Discussion :

petit excercice piège vector et références


Sujet :

Langage C++

  1. #21
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    C'est tout à fait exact. Mais si tu utilises resize, par exemple pour agrandir, tu vas créer de nouveaux éléments, size() n'aura plus la même valeur et emplace_back tout comme push_back auront toujours pour effet d'ajouter encore un nouvel élément, au risque de provoquer une invalidation des références.

    Si on fait un reserve(2) au début du code montré avant l'ajout du premier élément, il n'y aura pas de problème car on sait que l'ajout du deuxième ne nécessitera pas de redimensionnement. La mémoire du vector n'est redimensionnée que lorsque la mémoire additionnelle est consommée. Si on se réserve assez de mémoire additionnelle, on est tranquille .
    Mais n'est ce pas exactement le sens de ce que j'avais écrit

    Je me cite:
    Citation Envoyé par koala01 Voir le message
    Le pire de l'histoire, c'est que ca risque d'être très fortement dépendant de l'implémentation

    Je m'explique: A priori, tout pourrait parfaitement se passer s'il n'y avait pas besoin de faire un resize() pour rajouter le deuxième élément.
    C'est bel et bien un resize() qui est nécessaire lorsqu'on a attient la limite
    Comme il me semble que la capacité de départ est laissée à l'appréciation de l'implémentation, nous pourrions donc parfaitement trouver une implémentation spécifique de std::vector prévoyant d'emblée 5, 10 ou 15 éléments ce qui retarderait le moment du resize() d'autant, un peu à l'instar de ce que l'on aurait si on avait fait appel à reserve().
    Autrement dit : L'implémentation va fournir de base un conteneur permettant d'introduire 5, 10 ou 15 éléments, exactement comme si tu avais utilisé toi même reserve(5), reserve(10) ou reserve(15).

    Toujours est il que, si tu te retrouves avec 6, 11 ou 16 éléments à placer dans ton vecteur, resize() sera appelé et donc:
    Quoi qu'il en soit, dés le moment où un resize() sera nécessaire, toutes les références déclarées avant qu'il ne le soit seront invalidées
    sont-ce les mots "à l'instar de" qui t'ont empêché de comprendre ce que j'ai pourtant écrit dans un français plus que correct
    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

  2. #22
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hou je te sens vexé

    C'est juste que je trouve que les explications (pas forcément les tiennes) parfois longues dans les posts pour des sujets qui ne sont pas super compliqués non plus. L'invalidation ou non des références en fonction des différentes opérations effectuées sur une collection donnée sont des choses bien documentées, et tout dev C++ est rapidement amené à les comprendre.
    Find me on github

Discussions similaires

  1. Petit problème de vector
    Par Nicogo dans le forum C++
    Réponses: 14
    Dernier message: 16/05/2013, 16h59
  2. petit probleme avec Vector
    Par Msakeni dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 11/12/2008, 19h28
  3. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  4. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25

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