遍历list或map时删除元素(较巧妙)
2013-10-22 19:08
387 查看
#include <iostream> #include <list> #include <map> using namespace std; int main() { std::list<int> test_list; test_list.push_back(1); test_list.push_back(2); test_list.push_back(3); test_list.push_back(4); test_list.push_back(5); test_list.push_back(6); cout << "*****************delete list***************" << endl; std::list<int>::iterator iter = test_list.begin(); for(iter ; iter != test_list.end();) { if(*iter % 2 == 0) { test_list.erase(iter++); }else ++iter; } for(iter = test_list.begin(); iter != test_list.end(); ++ iter) { cout << *iter << " "; } cout << endl; cout << "*****************delete map****************" << endl; std::map<int, int> test_map; test_map[1] = 1; test_map[2] = 2; test_map[3] = 3; test_map[4] = 4; test_map[5] = 5; test_map[6] = 6; std::map<int, int>::iterator t_iter = test_map.begin(); for(t_iter; t_iter != test_map.end(); ) { if(t_iter->second % 2 == 0) { test_map.erase(t_iter++); }else ++ t_iter; } for(t_iter = test_map.begin(); t_iter != test_map.end(); ++ t_iter) { cout << t_iter->second << " "; } cout << endl; system("pause"); return 0; } 比较巧妙的点就在于 test_list.erase(iter++); test_map.erase(t_iter++); 利用后置自增操作符,传给erase函数的iterator是指向当前元素,而在这条语句之后,iter 自增,从而指向下一个元素,而不会导致因当前iterator删除而不能正确访问下一个元素的问题。 运行结果 *****************delete list*************** 1 3 5 *****************delete map**************** 1 3 5
相关文章推荐
- 如何在遍历list,vector,map时删除符合条件的元素
- Java如何在List或Map遍历过程中删除元素
- 如何在遍历list,vector,map时删除符合条件的元素
- 编程技巧系列(2)Java 集合(List,Set,Map)遍历时有条件删除特定元素
- vector, list, map在遍历时删除符合条件的元素
- vector list map 遍历删除指定元素
- vector, list, map在遍历时删除符合条件的元素实现方法
- Java遍历时删除List、Set、Map中的元素(源码分析)
- Java遍历时删除List、Set、Map中的元素(源码分析)
- 如何在遍历list,vector,map时删除符合条件的元素
- vector list map 遍历删除制定元素 防止迭代器失效的实例
- 【Java】集合(List、Set、Map)遍历、删除、比较元素时的小陷阱
- 遍历List、Map删除元素
- 集合--(List、Set、Map)遍历、删除、比较元素时的小陷阱
- vector list map 遍历删除制定元素 防止迭代器失效
- List,Set,Map遍历时删除元素
- 遍历并删除list中的元素
- Java 遍历Map时 删除元素
- c++如何遍历删除map/vector里面的元素
- 如何正确遍历删除List中的元素,你会吗?