Listeden geçen ve tüm çift sayıları silebilen bir liste yineleyici var. Numaraları düzgün yazdırmak için liste yineleyicisini kullanabilirim ancak listenin remove() işlevini kullanamıyorum ve dereferanslı yineleyiciyi iletemiyorum.List Iterator Kaldır()
Kaldır() ifadesi etkin olduğunda, * itr bozuk olur? Birisi bunu açıklayabilir mi?
#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
}
}
}
STL yineleyicilerinin yapının uzunluğu üzerinde herhangi bir bağımlılığı olmadığını belirtmeliyim. Yineleyiciler genellikle belirli öğeleri silmenize izin verir, örneğin vektör yineleyicileri yineleyiciden geçen öğeleri silmenize izin verir ve liste yineleyicileri yineleyici tarafından işaret edilmeyen herhangi bir öğeyi silmenize izin verir –