Tengo un iterador de lista que pasa por una lista y elimina todos los números pares. Puedo usar el iterador de lista para imprimir bien los números, pero no puedo usar remove() de la lista y paso el iterador desreferenciado.List Iterator Remove()
Me di cuenta de que cuando la declaración remove() está en vigor, * itr se corrompe? ¿Alguien puede explicar esto?
#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
}
}
}
Debo señalar que los iteradores de STL no dependen de la longitud de la estructura. Los iteradores con frecuencia le permiten eliminar ciertos elementos, por ejemplo, los iteradores de vectores le permiten eliminar elementos más allá del iterador, y los iteradores de lista le permiten eliminar cualquier cosa no apuntada por el iterador –