我有一个列表迭代器遍历列表并删除所有的偶数。我可以使用列表迭代器打印出数字,但我无法使用列表的remove()并在解除引用的迭代器中传递。列表迭代器删除()
我注意到,当remove()语句生效时,* itr被破坏?有人可以解释这一点吗?
#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迭代器对结构长度没有任何依赖性。迭代器通常允许你删除某些元素,例如向量迭代器允许你删除通过迭代器的项目,并且列表迭代器允许你删除迭代器没有指向的任何东西 – 2009-06-19 04:23:51