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.:aie: 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).
Si quelqu'un a une idée d'où peut venir le problème.Code:
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;
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