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

C++ Discussion :

for et condition terminale


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut for et condition terminale
    Hello,

    Quand la condition d'arrêt dépend de la taille d'un conteneur, il est déconseillé de mettre l'appel à size() dans le for, mais de l'appeler au préalable et d'affecter la valeur à une variable, utilisée dans le for.

    Toutefois, les compilateurs n'ont-ils pas l'intelligence de n'appeler cette fonction size(), qu'une seule fois ? Bien que je sois conscient que ledit conteneur puisse changer de taille dans la boucle...

  2. #2
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Et si le conteneur était assez bien écrit pour que size() soit en temps constant et non pas en fonction de sa taille ?

    Sans parler d'itérateurs, ou de "range loop", peut être qu'utiliser size() pour parcourir un conteneur n'est pas l'idéal ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 053
    Points
    33 053
    Billets dans le blog
    4
    Par défaut
    Je ne pense pas que le compilateur soit assez intelligent pour cela : il ne peut pas savoir si tu modifies pas la taille de ta boucle dans son parcours (ce qui n'est pas souvent recommandé d'ailleurs).

    Donc, il faut faire du cas par cas.
    Tu peux modifier ta boucle, mais ne pas vouloir parcourir les éléments ainsi ajoutés, donc tu prends la taille initiale.
    Tu peux modifier ta boucle et vouloir parcourir les nouveaux éléments, donc tu recalcules la taille à chaque fois.
    Attention lors de la suppression d'élément, si tu conserves la taille initiale il ne faut pas que les index soient réordonnés immédiatement à la suppression d'un élément.
    Et sûrement d'autres cas auxquels je ne pense pas et que je n'ai pas rencontré jusqu'à aujourd'hui.

    Citation Envoyé par Hylvenir Voir le message
    Et si le conteneur était assez bien écrit pour que size() soit en temps constant et non pas en fonction de sa taille ?
    wtf

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Même si tu n'appelais que des méthodes const de ton conteneur à l'intérieur de ta boucle, je ne pense pas qu'un compilateur pourrait faire ce genre d'optimisation, à cause de possibles const_cast et/ou champs mutable.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Bon, ben je crois que comme ces dernières années, je vais me faire une raison.

    Merci pour votre avis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle For avec condition sur doublons
    Par nyto35 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/04/2013, 11h04
  2. Pb boucle [FOR] avec condition [IF]
    Par Newenda dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/02/2010, 11h50
  3. Aide boucle for avec condition
    Par guigui33 dans le forum Images
    Réponses: 1
    Dernier message: 06/03/2008, 20h59
  4. [Tableaux] Boucle for dans condition de if
    Par Lenorah dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2008, 18h06
  5. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18

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