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 :

Deque et iterator


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Deque et iterator
    Bonjour à tous,

    me revoilà cette fois avec un problème sur les iterator :
    J'utilise une deque de Plaque. Plaque étant une classe possédant un attribut profondeur.

    etageActuel est initialisé à 1.
    Le premier element de la deque possède un attribut profondeur égal à 0
    Le second element de la deque possède un attribut profondeur égal à 1
    Quand j'appèle ma fonction pour la première fois, je rentre dans le while, et arrivé en bas, je décrémente l'itérateur. Je repasse dans la condition, et donc la j'ai 0<=1 faux donc j'en sors, pas de soucis.

    Au deuxième appel de ma fonction, je m'arrete au dernier élément que j'avais ajouté lors de l'appel précédent de ma fonction. (ok).

    Mais au troisième appel de ma fonction, c'est le drame. J'ai une erreur, lors de la décrémentation de mon iterator (enfin je pense ayant placé des cout avant et apres), alors que l'itérator n'est clairement pas l'iterator renvoyé par lifo.begin() (le nom de ma pile).

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    deque<Plaque>::iterator Iter=lifo.end()-1;//je prends le dernier element
    while(Iter->getProfondeur()>=etageActuel)//en th =
    		{
    			vector<int> nbDispo;//normalement j'initialise nbDispo avec un vecteur de l'élément pointé par Iter
    			nbDispo.push_back(2);
    			nbDispo.push_back(3);
    			Iter->AfficherPlaque();
    			for(unsigned int j=0;j<nbDispo.size();j++)//toute combinaison avec doublon
    			{
    				for(unsigned int k=0;k<nbDispo.size();k++)
    				{
    					if(j!=k)//si on a pas pris le même element deux fois :)
    					{
     
    						for(int op=0;op<MAX_OPERATION;op++)
    						{
     
    							int result(0);
    							if(OperationValide(nbDispo[j],op,nbDispo[k],result))//si on a un couple potentiel
    							{
     
     
     
    							}
    lifo.push_back(Plaque(nbDispo,2,"foi",etageActuel+1));
    						}
    					}
    				}
     
    			}
    			cout<<"avant la decrementation"<<endl;
    			--Iter;
    			cout<<"aprs la decrementation"<<endl;
    			if(Iter==lifo.begin())cout<<"oui"<<endl;
    			if(Iter>lifo.begin())cout<<"sup"<<endl;
    			if(Iter<lifo.begin())cout<<"inf"<<endl;
    		}
    		etageActuel++;
    		cout<<"sortie while"<<endl;
    Si quelqu'un a une idée d'où peut venir le problème.
    Je peux bien évidemment rajouter l'implémentation de mes classes, mais j'ai un peu honte de les mettre, c'est pas très esthétique...
    Il y a aussi du code qui n'apparait pas, mais même en commentaire j'ai le problème, donc je ne l'ai pas rajouté.

    Sinon, c'est pour faire un "compte est bon".

    Merci d'avance

  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
    Certaines opérations sur un conteneur invalident les itérateurs.
    Voir la doc.

  3. #3
    Invité
    Invité(e)
    Par défaut
    han, j'avais pas tilté sur l'exemple de cplusplus.com/reference ou ils initialisaient la deque avant l'utilisation des iterateurs. J'aurais du regarder push_back plus longtemps..

    En tout cas, merci, je commençais par désespérer

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

Discussions similaires

  1. Iteration VS recursivité
    Par yacinechaouche dans le forum C
    Réponses: 40
    Dernier message: 16/11/2012, 11h52
  2. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42
  3. [débutant][struts] iterate imbriquée
    Par muim dans le forum Struts 1
    Réponses: 6
    Dernier message: 19/02/2004, 15h13
  4. [debutant]iterator
    Par Wis dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 05/05/2003, 10h49
  5. vInt::iterator
    Par Monstros Velu dans le forum C++
    Réponses: 19
    Dernier message: 05/04/2003, 15h06

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