我有一個列表迭代器遍歷列表並刪除所有的偶數。我可以使用列表迭代器打印出數字,但我無法使用列表的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