C++ STL list 遍历删除问题
2015-04-03 13:01
260 查看
C++ STL list 遍历删除崩溃
错误用法一
下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602表明it不能再作为迭代器进行运算,自然会报错。
#include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR* argv[]) { TESTLIST t; for (int i = 0; i < 10;i++) { t.push_back(i); } for (TESTLIST::iterator it = t.begin(); it != t.end();) { t.erase(it); it++; } return 0; }
错误用法二
下面这种用法出现的错误与错误一相同#include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR* argv[]) { TESTLIST t; for (int i = 0; i < 10;i++) { t.push_back(i); } for (TESTLIST::iterator it = t.begin(); it != t.end();it++) { t.erase(it); } return 0; }
错误用法三
下面这种用法以为不it++就不会有事,其实他们的错误都一样,那就是t.erase(it)之后 it已经是非迭代量,自然不能作为迭代操作#include "stdafx.h" #include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR* argv[]) { TESTLIST t; for (int i = 0; i < 10;i++) { t.push_back(i); } for (TESTLIST::iterator it = t.begin(); it != t.end();) { t.erase(it); } return 0; }
正确用法
#include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR* argv[]) { TESTLIST t; for (int i = 0; i < 10;i++) { t.push_back(i); } for (TESTLIST::iterator it = t.begin(); it != t.end();) { t.erase(it++); } return 0; }
相关文章推荐
- C++遍历中删除std::hash_map元素问题
- C++ STL list的初始化、添加、遍历、插入、删除、查找、排序、释放
- c++ vector遍历删除元素 出错的问题
- C++ STL list 遍历删除出错解决方案
- C++ STL map 删除元素的问题
- C++ 二叉树(创建,遍历,查找,插入,删除)『菜鸟版』
- std::map遍历删除某些元素问题
- C++ vector一边遍历一边删除元素
- C/C++面试之算法系列--约瑟夫环:每隔两个循环删除数组元素,求最后删除者的下标问题
- C++ stl list、map、vector删除元素
- c++中List在遍历时删除节点的方法(转载)
- C++实现二叉树(初始化,删除,遍历)
- 在遍历C++map中删除元素算法(简单例子)
- C++遍历中删除std::map元素
- stl list(链表)的删除问题
- foreach遍历删除问题:
- C++中删除头结点中的一点问题,希望大家帮帮忙
- C++单链表的动态创建,查找,遍历,删除,插入,添加,排序
- C++遍历中删除std::map元素
- C++ STL 遍历 map 的时候如何删除其中的 element