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 :

différence entre itérateur et indice ( [] )


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut différence entre itérateur et indice ( [] )
    Bonjour
    Voila un petit moment que je me pose cette question.
    Question peut être stupide ou classique, mais je n'ai curieusement trouvé de réponse nulle part.
    Imaginons qu'on veuille parcourir un vector.
    Y a t il une différence entre utiliser un iterator ou l'op []
    concrètement quelle est la différence entre les boucles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<int> monvector;
    ....
     
    for(int i = 0; i < monvector.size();i++)
    {...}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(std::vector<int>::iterator it = monvector.begin(); it != monvector.end(); it++)
    {...}
    L'une est elle plus rapide que l'autre? Pourquoi?

    Merci d'éclairer ma lanterne

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La version itérateur pourrait être plus rapide, mais en pratique les compilateurs sont pas stupides et c'est pareil.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    De plus la version avec itérateur a l'avantage d'exister pour tous les conteneurs de la STL. Les itérateurs offrent une méthode uniformisée pour parcourir un conteneur quelqu'il soit. Ce qui n'est pas le cas de l'opérateur [].

    D'un autre coté avec la version [] tu connais l'indice de l'objet que tu manipules.

    Apres pour un vecteur, ca doit être plus ou moins la même chose pour la machine : les 2 versions ne sont que des pointeurs déguisés (avec déréférencement pour l'un).
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    L'idéal serait plutôt std::for_each(monvector.begin(),monvector.end(),...) ou toute autre fonction de la STL adapté à ton cas. A ce moment, la STL est supposé t'offrir le parcours le plus optimisé pour ton conteneur. Je dirais que le principe serait d'invoquer au max les conteneurs/algo de la STL lorsque cela est possible car ils ont été fait pour ça.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut
    merci pour vos réponses.

    donc pas vraiment de différence entre les deux.. je vais continuer de mettre 50% de l'un et 50% de l'autre

    je retiens le for_each !

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    J'avais fait des essaye avec visual.
    Avec un vector :
    un parcoure par iterateur avec un for est 2% moins rapide qu'avec le foreach. (Le foreach est équivalent au parcoure avec [])

    Par contre avec d'autre conteneur le gain est énorme. Avec une list, le foreach est 50%-60% plus rapide qu'avec le for.

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

Discussions similaires

  1. différence entre itérateurs et operator[]
    Par mirecalu dans le forum C++
    Réponses: 6
    Dernier message: 23/05/2013, 17h29
  2. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  3. différence entre 2 indications de temps
    Par bech59 dans le forum Excel
    Réponses: 1
    Dernier message: 03/04/2009, 12h06
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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