国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ STL list 遍歷刪除出錯解決方案

2020-01-26 14:22:15
字體:
來源:轉載
供稿:網友

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; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定兴县| 会泽县| 申扎县| 闽清县| 临沧市| 扎鲁特旗| 肇庆市| 开原市| 繁峙县| 台东县| 赣州市| 汉阴县| 浦东新区| 孝义市| 宁强县| 曲阳县| 桦甸市| 盐边县| 剑川县| 通许县| 福贡县| 两当县| 新野县| 双辽市| 远安县| 宾川县| 永平县| 沙雅县| 丘北县| 昌江| 富裕县| 大安市| 梁山县| 吉安市| 盈江县| 广平县| 汽车| 图们市| 江安县| 蓝山县| 通山县|