J'ai un itérateur de liste qui parcourt une liste et supprime tous les nombres pairs. Je peux utiliser l'itérateur de liste pour imprimer les nombres, mais je ne peux pas utiliser la liste remove() et passer dans l'itérateur déréférencé. J'ai remarqué que lorsque l'instruction remove() est en vigueur, * itr est corrompu? Quelqu'un peut-il expliquer cela?Liste Iterator Remove()
#include <iostream>
#include <list>
#define MAX 100
using namespace std;
int main()
{
list<int> listA;
list<int>::iterator itr;
//create list of 0 to 100
for(int i=0; i<=MAX; i++)
listA.push_back(i);
//remove even numbers
for(itr = listA.begin(); itr != listA.end(); ++itr)
{
if (*itr % 2 == 0)
{
cout << *itr << endl;
listA.remove(*itr); //comment this line out and it will print properly
}
}
}
Je dois souligner que les itérateurs STL ne dépendent pas de la longueur de la structure. Les itérateurs vous permettent souvent de supprimer certains éléments, par exemple les itérateurs vectoriels vous permettent de supprimer des éléments après l'itérateur, et les itérateurs de liste vous permettent de supprimer tout ce qui n'est pas pointé par l'itérateur. –