suppression d'une structure dans une liste visual c++

suppression d'une structure dans une liste visual c++ - C++ - Programmation

Marsh Posté le 24-07-2008 à 12:02:53    

Bonjour
 
Voila j'ai un problème.
 
Je me suis crée une structure:
 

Code :
  1. struct toto
  2. {
  3. titi   data; //autre structure
  4. bool active;
  5. int Index;
  6. float color[3];
  7. };


 
jusque la pas de problème, ensuite après le remplissage de la structure je la met dans une liste de type :
 

Code :
  1. std::list<toto*> mylist_toto; // à noter que j'utilise des pointeurs


 
jusque la toujours pas de problème, je remplis correctement ma liste
 
Mon problème est le suivant : Je voudrai parcourir ma liste et supprimer un élément de ma liste en fonction de son index.
par exemple :je parcours ma liste et dès que je vois qu'un structure a un index égal à 5 et bien je la vire.
 
Alors je crée un iterator pour le parcours de ma liste :
 

Code :
  1. list<toto*>::iterator it1;


 
je parcours ma liste :  
 
 

Code :
  1. for(it1 = mylist_toto.begin(); it1 != mylist_toto.end(); it1 ++)
  2. {
  3.                //la je veux supprimer mon élément de ma liste en fonction de son index
  4.  if ()// que dois je mettre dedans?
  5.  {
  6.   *diagram = mylist_Diagram.erase(*diagram);// est ce que cela fonctionne
  7.  }
  8. }


 
Donc voila mon problème je ne trouve pas la condition et l'ecrasement;
 
Merci et bonne journée
 
tassiruam


Message édité par tassiruam le 24-07-2008 à 13:47:42
Reply

Marsh Posté le 24-07-2008 à 12:02:53   

Reply

Marsh Posté le 24-07-2008 à 14:23:01    

Code :
  1. if (5 == it1->index)
  2. mylist_toto.erase(it1);
 

nan ?


Message édité par kyntriad le 24-07-2008 à 14:23:10

---------------
You can't start a fire with moonlight
Reply

Marsh Posté le 28-07-2008 à 17:01:15    

je dirais çà :
 

Code :
  1. for(it1 = mylist_toto.begin(); it1 != mylist_toto.end(); )
  2. {
  3. //la je veux supprimer mon élément de ma liste en fonction de son index
  4. if ((*it1).Index == 5 )
  5. {
  6.  // *diagram = mylist_Diagram.erase(*diagram);// -> c'est quoi diagram ??
  7.  list<toto*>::iterator itDel = it1;
  8.  ++it1;
  9.  mylist_Diagram.erase(itDel);
  10. }
  11. else
  12. {
  13.  ++it1;
  14. }
  15. }


 
erase() invalide l'itérateur courant, donc il faut faire le ++ avant de l'appeller, et ne pas le faire dans la boucle for() puisqu'alors on le ferait deux fois dans ce cas là, d'où le 'else'
 
bon normalement tu peux aussi écrire

Code :
  1. it1 = mylist_Diagram.erase(it1);


mais c'est moins facilement lisible


Message édité par Malkav le 28-07-2008 à 17:05:00
Reply

Marsh Posté le 28-07-2008 à 18:39:56    

attention l'API list et set et etc n'est pas la même.
Il faut bien lire la doc. Tantôt c'est it = l.erase(it) tantôt ça sera l.erase(it++)
 
sinon y a des tas d'algo bien dans STL, genre remove_if

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed