C++ STL list 遍历删除出错解决方案
2016-12-12 11:51
891 查看
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++ STL list 遍历删除问题
- c++ vector遍历删除元素 出错的问题
- C++ STL list的初始化、添加、遍历、插入、删除、查找、排序、释放
- MySQL4中嵌套子查询删除出错解决方案
- 在遍历C++map中删除元素算法(简单例子)
- C++ 二叉树(创建,遍历,查找,插入,删除)『菜鸟版』
- c++下list在遍历时删除节点的方法
- C++ vector一边遍历一边删除元素
- C++单链表的动态创建,查找,遍历,删除,插入,添加,排序
- C++ 单链表的建立,插入数值,删除数值,排序,遍历,和分割操作
- c++ 关于map的遍历 删除
- c++中List在遍历时删除节点的方法,带源码
- 在Page_Loaded下删除PivotItem出错的解决方案
- C++遍历中删除std::map元素
- c++中vector的遍历及元素删除
- DataGrid翻页后删除记录出错的解决方案[转帖]
- STL中用erase()方法遍历删除元素【容易出错】
- C++ STL 遍历 map 的时候如何删除其中的 element
- 对C++ STL,list元素的循环删除操作 //断链,出错地方
- c++中List在遍历时删除节点的方法(转载)