读书人

请问:在遍历STL的list容器时进行插删操

发布时间: 2012-03-03 15:33:03 作者: rapoo

请教:在遍历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;
}

读书人网 >C++

热点推荐