请教:在遍历STL的list容器时进行插删操作后迭代器失效怎么办?
我在STL中使用迭代器遍历list容器。但如果对容器进行了插和删的操作后,当前所有指向该容器的迭代器都会失效。
那么我在遍历这个list的时候,会从中删除一些元素。如果这样,那不是我每删除一个都要重新开始遍历一次了?有什么办法可以解决啊?
[解决办法]
比如,下面这个例子删除一个整数list中所有的偶数。当然,这只是个例子,删除几个偶数,本来或许没必要这么麻烦。
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
int main() {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
list <int> int_list(a, a + sizeof(a) / sizeof(int));
ostream_iterator <int> oitr(cout, " ");
copy(int_list.begin(), int_list.end(), oitr);
cout < < endl;
list <int> ::iterator itr = int_list.begin();
while(itr != int_list.end()) {
if(*itr % 2 == 0) {
int_list.erase(itr++);
} else {
++itr;
}
}
copy(int_list.begin(), int_list.end(), oitr);
cout < < endl;
return 0;
}