• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ STL list 遍历删除出错解决方案

C++ STL list 遍历删除出错解决方案

作者:zhouyongku 字体:[增加 减小] 来源:互联网 时间:2017-05-28

zhouyongku 通过本文主要向大家介绍了c++ stl,c++ stl容器,c++ stl标准程序库,c++ stl教程,c++ stl sort等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

错误用法二

下面这种用法出现的错误与错误一相同

#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; 
} 
</div>

错误用法三

下面这种用法以为不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; 
} 

</div>

 正确用法

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

</div>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中 map的基本操作
  • C++中 STL list详解及简单实例
  • 浅谈c++ stl迭代器失效的问题
  • C++ STL list 遍历删除出错解决方案
  • c++中容器之总结篇
  • C++在成员函数中使用STL的find_if函数实例
  • 浅析C/C++中sort函数的用法
  • 深入解析C++ STL中的常用容器
  • C++ 关于STL中sort()对struct排序的方法
  • C++利用容器查找重复列功能实现

相关文章

  • 2017-05-28关于STL的erase()陷阱-迭代器失效问题的总结
  • 2017-05-28C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码
  • 2017-05-28C语言实现五子棋小游戏
  • 2017-09-06hdoj 1533 && poj 2195 Going Home
  • 2017-05-28深入C++中inline关键字的使用
  • 2017-05-28基于malloc与free函数的实现代码及分析
  • 2022-04-30C语言位运算(按位与运算、或运算、异或运算、左移运算、右移运算)
  • 2017-05-28C++ decltype类型说明符
  • 2017-05-28operator new在C++中的各种写法总结
  • 2017-05-28c语言stack(栈)和heap(堆)的使用详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C++成员函数的override和final说明符的用法
    • 解析为何要关闭数据库连接,可不可以不关闭的问题详解
    • win32下进程间通信(共享内存)实例分析
    • 浅谈C++中的mutable和volatile关键字
    • C++标准之(ravalue reference) 右值引用介绍
    • win32 api实现2048游戏示例
    • C语言求解最长公共子字符串问题及相关的算法分析
    • 基于条件变量的消息队列 说明介绍
    • MFC对话框中添加状态栏的方法
    • C++中赋值运算符与逗号运算符的用法详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有