基于list循环删除元素,迭代器失效的问题详解
问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会失效
#include<iostream> #include<list> using namespace std; int main() { list<int *> l; for(int i=1;i<=100;i++) { int* temp=new int; *temp=i; l.push_back(temp); } list<int *>::iterator it=l.begin(); list<int *>::iterator ittemp=l.begin(); for(;it!=l.end();++it) { cout<<*(*it)<<endl; } it=l.begin(); ittemp=l.begin(); for(;it!=l.end();) { ittemp=it; ++it; delete (*ittemp); l.erase(ittemp); } cout<<l.size()<<endl; return 0; }
以上就是小编为大家带来的基于list循环删除元素,迭代器失效的问题详解全部内容了,希望大家多多支持我们~
相关推荐
-
浅谈c++ stl迭代器失效的问题
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法 int arr[]={0,1,2,3,4,5,6,7,8,9,10}; vector<int> a(arr,arr+sizeof(arr)/sizeof(*arr));for (auto it = a.begin(); it !=
-
关于STL的erase()陷阱-迭代器失效问题的总结
下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时,需要注意一些问题. 1.list,set,map容器 在使用 list.set 或 map遍历删除某些元素时可以这样使用: 1.1 正确写法1 std::list< int> List; std::list< int>::iterato
-
基于list循环删除元素,迭代器失效的问题详解
问题的关键是:在删除元素之前,将当前迭代器保存下来.当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会失效 #include<iostream> #include<list> using namespace std; int main() { list<int *> l; for(int i=1;i<=100;i++) { int* temp=new
-
基于DOM节点删除之empty和remove的区别(详解)
要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题,这里我们开仔细了解下empty和remove方法 empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点. 这个方法不仅移除子元素(和其他后代元素),同样移除元素里的文本.因为,根据说明,元素里任何文本字符串都被看做是该元素的子节点.请看下面的HTML: <div class="hello"><p>这是p标签</p></
-
Python 中迭代器与生成器实例详解
Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的所有元素,但是不想用for循环 解决方案:使用next()函数,并捕获StopIteration异常 def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: br
-
基于 D3.js 绘制动态进度条的实例详解
D3 是什么 D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档.听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的.如果你不知道什么是 JavaScript ,请先学习一下 JavaScript,推荐阮一峰老师的教程. JavaScript 文件的后缀名通常为 .js,故 D3 也常使用 D3.js 称呼.D3 提供了各种简单易用的函数,大大简化了 JavaScript 操作数据的难度.由于
-
基于Python Numpy的数组array和矩阵matrix详解
NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵
-
基于vue-cli3多页面开发apicloud应用的教程详解第1/2页
之前开发项APP项目直接用APICloud+原生js的方式进行编写,整个项目下来发现开发慢,页面代码多且复杂,维护起来相对困难,而且文件大打包之后的APP会比较大,apicloud的框架也不好用,支持部分es67(像let.const.import等es6新特性不支持写的太难受了) 采用vue-cli+APIcloud的方式写解决以上痛点,开发灵活,并且打包之后体积更小速度更快 环境依赖 vue webpack vue-cli3 nodeJS 基本流程 项目开发最好准备两个项目,一个打包APP,
-
基于原生ajax与封装的ajax使用方法(详解)
当我们不会写后端接口来测试ajax时,我们可以使用node环境来模拟一个后端接口. 1.模拟后端接口可参考网站整站开发小例子,在打开命令窗口并转到所在项目文件夹下在命令行中输入npm install express --save,安装express中间件. 2.把当中的app.js的内容换成 var express=require('express'); //var path=require('path'); var app=express(); //app.set('view',path.jo
-
Python 迭代器与生成器实例详解
Python 迭代器与生成器实例详解 一.如何实现可迭代对象和迭代器对象 1.由可迭代对象得到迭代器对象 例如l就是可迭代对象,iter(l)是迭代器对象 In [1]: l = [1,2,3,4] In [2]: l.__iter__ Out[2]: <method-wrapper '__iter__' of list object at 0x000000000426C7C8> In [3]: t = iter(l) In [4]: t.next() Out[4]: 1 In [5]: t.
-
MariaDB(MySQL)创建、删除、选择及数据类型使用详解
一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A
-
基于rem的移动端响应式适配方案(详解)
视口 在前一段时间,我曾经写过一篇关于viewport的文章.最近由于在接触移动端开发,对viewport有了新的理解.于是,打算重新写一篇文章,介绍移动端视口的相关概念. 关于这篇文章说到的所有知识,本质上离不开以下代码 <meta name="viewport" content="width=device-width, initial-scala=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
随机推荐
- 两个强悍的php 图像处理类1
- JS基于递归实现倒计时效果的方法
- 配置IP地址的批处理代码
- 谈谈JavaScript的New关键字
- 详解iOS的Core Animation框架中的CATransform3D图形变换
- .NET装饰模式讲解
- BootStrap智能表单实战系列(十一)级联下拉的支持
- php分页查询的简单实现代码
- 利用pyinstaller或virtualenv将python程序打包详解
- Android开发中include控件用法分析
- 轻松创建nodejs服务器(6):作出响应
- Ajax 用户名验证是否存在
- Debian 9系统下修改默认网卡为eth0的方法
- mysql 复制记录实现代码
- C语言数据结构之双向循环链表的实例
- Android 开发之旅:详解view的几种布局方式及实践
- Java实现发送短信验证码功能
- vue嵌套路由与404重定向实现方法分析
- 利用ScriptEngineManager实现字符串公式灵活计算的方法
- Spring Boot集成Shiro实现动态加载权限的完整步骤