Ho un iteratore di lista che passa attraverso un elenco e rimuove tutti i numeri pari. Posso usare l'elenco iteratore per stampare i numeri, ma non posso usare la lista remove() e passare l'iteratore dereferenziato.Lista Iterator Remove()
Ho notato che quando l'istruzione remove() è attiva, * itr viene danneggiato? Qualcuno può spiegarlo?
#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
}
}
}
Devo sottolineare che gli iteratori STL non hanno alcuna dipendenza dalla lunghezza della struttura. Gli iteratori ti consentono spesso di eliminare determinati elementi, ad esempio gli iteratori del vettore ti consentono di eliminare gli elementi oltre l'iteratore e gli iteratori di elenchi ti consentono di eliminare tutto ciò che non è indicato dall'iteratore. –