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 :

iterateur acc�s � l'�l�ment suivant


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Par d�faut iterateur acc�s � l'�l�ment suivant
    Bonjour,

    j'ai un vector � parcourir, pour cela j'utilise un iterateur comme ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
      for(std::vector<Structure*>::iterator p = collec_tmp.begin(); p!=collec_tmp.end();++p)
    {
    //contenu de la boucle
    }
    ce que je veut c'est acc�der a l'�l�ment i+1 � l�int�rieure de la boucle est-ce possible avec un iterateur ?

    avec une boucle simple ont peut faire ( je voudrais la m�me chose avec un iterator) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    for(size_t i = 0; i<collec_tmp.size();++i)
    {
      collec_tmp[i]=collec_tmp[i+1];
    }

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    Tu peux proc�der comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    for(auto p = collec_tmp.begin(), pnext=p+1, pend=collec_tmp.end(); p!=pend && pnext!=pend; ++p, ++pnext)
    {
        *p = *pnext;
    }

  3. #3
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Par d�faut
    Citation Envoy� par vbaddict44 Voir le message
    Bonjour,

    j'ai un vector � parcourir, pour cela j'utilise un iterateur comme ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
      for(std::vector<Structure*>::iterator p = collec_tmp.begin(); p!=collec_tmp.end();++p)
    {
    //contenu de la boucle
    }
    ce que je veut c'est acc�der a l'�l�ment i+1 � l�int�rieure de la boucle est-ce possible avec un iterateur ?
    Bien s�r que c'est possible, mais l'algorithme est moins facile.


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    vector<Truc*>::iterator it = elements.begin();
    const vector<Truc*>::iterator end = elements.end();
    Truc * previous = 0;
    Truc * current = 0;
    if (it != end) {
      previous = *it;
      ++it;
      while (it != end) {
        current = *it;
        // 
        // ton code ici
        ++it;
        previous = current;
      }
    }

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par d�faut
    Bonjour,
    Un it�rateur de vecteur se comporte comme un pointeur. Tu peux faire le m�me genre d'arithm�tique dessus.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    for(std::vector<Structure*>::iterator p = collec_tmp.begin();!=collec_tmp.end();++p)
    {
       *p = *(p + 1);
    }
    Par contre attention, ce code est faux car lors de la derni�re boucle p+1 pointe sur un �l�ment incorrect. (M�me probl�me avec ton code initial collec_tmp[i+1] est invalide lors de la derni�re boucle)

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Bonjour,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    for(std::vector<Structure*>::iterator p = collec_tmp.begin();!=collec_tmp.end();++p)
    Est-ce qu'il ne vaut pas mieux sortir le collec_tmp.end() du for ?

    Sinon pour �viter le probl�me d� au dernier �l�ment, j'ai une petite solution :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::vector<Structure*>::const_iterator const fin = collec_tmp.end();
    std::vector<Structure*>::iterator p = collec_tmp.begin();
    if(p != fin)
           while(++p !=fin)
           {
                   *(p-1) = *p;
            }

    EDIT : poses-tu questions ici plut�t que de les poser par mp s'il te plait.
    j'aimerais savoir comment comment acceder au dernier element d'un vector en utilisant un iterator.
    R�ponse :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    MonConteneur::reverse_iterator p = monConteneur.rbegin();

  6. #6
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Par d�faut
    Merci (*q++) et (*q--) fonctionnent ?

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    *(q++) fonctionnera pour tout les conteneur.
    *(q--) fonctionnera avec certains conteneurs mais pas forc�ment avec tous.

    Si tu veux parcourir du dernier au premier �l�ment il faut utiliser des reverses iterator :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    MonConteneur::reverse_iterator p = monConteneur.rbegin();
    MonConteneur::const_reverse_iterator const fin = monConteneur.rend();
     
    for(; p != fin; ++p)
    ++p sur un reverse_iterator va � l'�l�ment pr�c�dant.
    --p sur un reverse_iterator va � l'�l�ment suivant.
    Tu parcourras ainsi tous les �l�ments du dernier au premier.

  8. #8
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Par d�faut
    Bonjour dans une boucle for je fait :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     if(q==collec_raidi_babord.begin())
                {
                    z3=pont_sup->retour_position();
                }
                else
                {
                    z3=(*q-1)->retour_position();//à corriger ne fonctionne pas
                }
    cela me fait une boucle infinie comment contourner ce probl�me ?

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Est-ce qu'on pourrait d�j� voir l'ensemble de ta boucle for?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    z3=(*q-1)->retour_position();//à corriger ne fonctionne pas
    Je ne sais pas exactement ce que tu essayes de faire mais est-ce que tu ne veux pas faire ceci ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    z3=(*(q-1) )->retour_position();

  10. #10
    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
    Par d�faut
    Citation Envoy� par cob59 Voir le message
    Tu peux proc�der comme �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    for(auto p = collec_tmp.begin(), pnext=p+1, pend=collec_tmp.end(); p!=pend && pnext!=pend; ++p, ++pnext)
    {
        *p = *pnext;
    }
    Attention, auto n'est pas disponible par d�faut sur tous les compilos.

  11. #11
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    57
    D�tails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 57
    Par d�faut
    r�solu merci neckara il me manquait le parenth�ses.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Acc�s aux �l�ments de diff�rentes frames
    Par metalpetsFR dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 7
    Dernier message: 16/09/2009, 06h36
  2. R�ponses: 10
    Dernier message: 14/06/2009, 14h17
  3. [focus] Passer le focus � l'�l�ment suivant
    Par FrankOVD dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 12/05/2006, 22h02
  4. [Rico] Acc�s aux �l�ments de la page de mani�re bizarre
    Par dodik dans le forum Biblioth�ques & Frameworks
    R�ponses: 3
    Dernier message: 22/02/2006, 17h35
  5. R�ponses: 1
    Dernier message: 13/07/2005, 15h51

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