 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Eric Bart Guest
|
Posted: Tue Jun 01, 2004 9:00 pm Post subject: Comment utiliser erase avec les list dans une boucle |
|
|
Bonjour,
J'ai essayé :
list<int>::iterator itLi;
for(itLi = li.begin(); itLi !=li.end(); itLi++)
li.erase(itLi);
Mais le compilateur est paumé après le premier passage.
Le code ci-dessous fonctionne :
itLi = li.begin();
while(itLi != li.end())
itLi = li.erase(itLi);
Je me demande comment utiliser cette technique quand on
efface partiellement. Comme ça ? :
itLi = li.begin();
while(itLi != li.end())
if((*itLi) == xxx)
itLi = li.erase(itLi);
else
itLi++;
J'ai aussi essayé d'effacer en commençant par la fin avec un
reverse_iterator mais erase ne veut d'un reverse_iterator.
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Tue Jun 01, 2004 11:22 pm Post subject: Re: Comment utiliser erase avec les list dans une boucle |
|
|
"Eric Bart" <eb-adm (AT) eric-bart (DOT) pasdepubmerci.net> writes:
| Quote: | list<int>::iterator itLi;
for(itLi = li.begin(); itLi !=li.end(); itLi++)
li.erase(itLi);
|
Après `erase()', l'itérateur est invalide (en fait, tous les
itérateurs désignant le même élément, mais pas les autres, je pense).
Donc incrémenter `itLi' est incorrect.
| Quote: | Mais le compilateur est paumé après le premier passage.
Le code ci-dessous fonctionne :
itLi = li.begin();
while(itLi != li.end())
itLi = li.erase(itLi);
|
Le point intéressant est que le retour d'`erase()' fournit un
itérateur sur l'élément suivant celui qui a été détruit (ou end() en
cas de fin de liste).
Mais le mieux dans ce cas est :
li.erase( li.begin() , li.end() ) ;
qui est équivalent à :
li.clear() ;
| Quote: | Je me demande comment utiliser cette technique quand on
efface partiellement. Comme ça ? :
itLi = li.begin();
while(itLi != li.end())
if((*itLi) == xxx)
itLi = li.erase(itLi);
else
itLi++;
|
Yep. Regarde aussi `remove_if<>()'.
--drkm
|
|
| Back to top |
|
 |
Eric Bart Guest
|
Posted: Wed Jun 02, 2004 10:21 am Post subject: Re: Comment utiliser erase avec les list dans une boucle |
|
|
Merci.
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|