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] Incrémentation d'un iterateur de liste


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut [STL] Incrémentation d'un iterateur de liste
    Bonjour,
    J'ai un probleme de compilation qui intervient lorsque je souhaite accéder à un des éléments suivant de l'itérateur.

    Voici un exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	for(iterator = lRoad.begin(); iterator != lRoad.end(); ++iterator)
    	{
     
                      int a = iterator->x;
                      int b = ( *(iterator+1) ).x;
     
    	}
    L'exemple ci dessus n'a aucun intérêt mais j'essais de comprendre pourquoi il y a une erreur sur "( *(iterator+1) ).x", car l'iterateur est censé marcher comme un pointeur classique ou je me trompe...

  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
    Seuls les itérateurs qui supportent le Random Access supportent l'opération + n.
    Les listes ne supportent que l'opération ++.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut
    Ok merci, donc je vais changer les listes par des vecteurs.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Mais les itérators sont copiables.
    Tu peux donc faire ceci au besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	for(iterator = lRoad.begin(); iterator != lRoad.end(); ++iterator)
    	{
                      list::iterator iterator2 = iterator;
                      int a = iterator2->x;
                      int b = (++iterator2)->x;
    	}
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par BruceBoc
    Bonjour,
    J'ai un probleme de compilation qui intervient lorsque je souhaite accéder à un des éléments suivant de l'itérateur.

    Voici un exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	for(iterator = lRoad.begin(); iterator != lRoad.end(); ++iterator)
    	{
     
                      int a = iterator->x;
                      int b = ( *(iterator+1) ).x;
     
    	}
    L'exemple ci dessus n'a aucun intérêt mais j'essais de comprendre pourquoi il y a une erreur sur "( *(iterator+1) ).x", car l'iterateur est censé marcher comme un pointeur classique ou je me trompe...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int b = ( *(++iterator) ).x;
    marchera ici

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ou mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(iterator = lRoad.begin(); iterator != lRoad.end(); )
    {
        int a = iterator->x;
        ++iterator;
        if (iterator != lRoad.end())
            int b = iterator->x;
    }

  7. #7
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Encore mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    iterator = lRoad.begin();
    while( 1 )
    {
        int a = iterator->x;
        if (++iterator != lRoad.end())
            int b = iterator->x;
        else
            break;
    }

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut
    Ok merci pour les exemples.

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

Discussions similaires

  1. iterateur de liste
    Par mehdi_me85 dans le forum Débuter
    Réponses: 2
    Dernier message: 01/07/2009, 16h25
  2. serialisation d'iterateur de liste avec Boost::serialization
    Par CedricMocquillon dans le forum Boost
    Réponses: 2
    Dernier message: 22/08/2008, 18h02
  3. Problème Iterateur sur liste d'objets
    Par kornterstrike dans le forum SL & STL
    Réponses: 1
    Dernier message: 23/11/2007, 19h33
  4. STL : problème avec un iterateur
    Par fabienpot dans le forum SL & STL
    Réponses: 4
    Dernier message: 06/09/2006, 09h06
  5. [Collections] hasPrevious() et previous() sur Iterateur de List
    Par red210 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/04/2005, 14h00

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