STL erase() 迭代器失效
STL中的容器按存储方式分为两类:序列容器(如:vector 、deque、list);关联容器(如:set、map)
两种容器在使用erase方法来删除元素时或产生迭代器失效的问题
对于非顺序序列容器
1 std::list<int> List; 2 std::list<int>::iterator iter = List.begin(); 3 for(;iter!=List.end();) 4 { 5 if(needDelete(*iter)) 6 { 7 iter= List.erase(iter); 8 } 9 else 10 { 11 iter++; 12 } 13 } 14 15 std::list<int> List; 16 std::list<int>::iterator iter = List.begin(); 17 for(;iter!=List.end();) 18 { 19 if(needDelete(*iter)) 20 { 21 List.erase(iter++);//iter自增操作 返回给erase原始值的副本 此时iter已经指向了下一个元素 但是由于序列容器在删除元素的时候回移动元素 这样的操作返回的下一个元素的迭代器也是失效的 22 } 23 else 24 { 25 iter++; 26 } 27 }
顺序序列容器(vector、deque)
代码和关联容器第一种方式一样 但是第二种方式不适用序列容器
关联容器(map set)
删除方法和非顺序容器相同。
另外 在删除的时候可以使用remove/remove_if搭配erase的方式
转载于:https://www.cnblogs.com/onlyDIABLO/p/4274370.html
STL erase() 迭代器失效相关推荐
- C++---STL中迭代器失效的总结
我们在使用STL底层给我们提供的一些容器的时候,当我们给一个容器中增加(insert)或删除(erase),最有可能出现迭代器失效. 什么是迭代器失效 在对容器进行操作的时候,由于一些操作,使得元素保 ...
- STL 容器迭代器失效总结
总结常见的序列容器(vector.deque.list)和关联容器(set.multiset.map.multimap)的迭代器失效问题. 原迭代器指的是进行操作之前保存的迭代器,包括begin(). ...
- C++(STL):09---vector迭代器失效问题
在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦, ...
- 【C++】vector的模拟实现@STL —— 迭代器失效问题
vector的模拟实现@STL 1. (constructor) & (destructor) 2. 一系列基本接口 2.1 size & capacity 2.2 [] 2.3 it ...
- STL的erase()陷阱-迭代器失效总结
下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...
- 容器删除元素后迭代器失效_STL 4: STL之容器:选择时机,删除元素,迭代器失效...
一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...
- STL源码剖析---STL容器特征总结(含迭代器失效)
Vector 1.内部数据结构:连续存储,例如数组. 2.随机访问每个元素,所需要的时间为常量. 3.在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化 ...
- STL源码剖析---迭代器失效小结
迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针.但它又不是我们所谓普通的指针 ...
- STL中容器vector迭代器失效的相关问题
迭代器失效,有两个层面的意思: 无法通过迭代器++,–操作遍历整个stl容器.记作: 第一层失效. 无法通过迭代器存取迭代器所指向的内存. 记作: 第二层失效. vector是个连续内存存储的容器,如 ...
最新文章
- linux下unzip解压报错“symlink error: File name too long”怎么办?提供解决方案。
- windows下安装nodejs及框架express
- 7 Java NIO Selector-翻译
- 组会PPT20200522《Summary of Study and Research from May 8 to May 21》
- Spring vs Seam
- Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现
- 计算机路表配置命令,计算机、华为交换机、路由器配置命令表
- 2017.4.2 loli测试
- 二次优化问题dfp_MATLAB优化问题应用实例讲解
- Android功能点(一)——判断网络是否真正连通
- python音频提取pcm_python pcm音频添加头转成Wav格式文件的方法
- 算法:回溯十五 Palindrome Partitioning字符串的字符串为回文所有解集合(2中解法)
- 無題(後改為總有那麼一句話)
- 洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
- 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
- 小提琴机器人拉法_手工小提琴价格,小提琴左手持琴姿势和肩托的使用
- 并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
- 2021年全球电子雪茄行业调研及趋势分析报告
- MoviePy - 中文文档4-MoviePy实战案例-给MoviePy Logo做一个闪动的阴影效果
- Python 详解计算 Median Absolute Deviation(绝对中位偏差)| 还可用于异常值检测
热门文章
- python变量类型-Python变量类型
- 有道精品课python-115批量转存与提取sha1工具2020下载
- python下载代码-Python3----下载小说代码
- python文件读取数据-Python从文件中读取数据
- python怎么读excel文件-python如何读写excel文件
- python乘法口诀编程-中年大叔学编程-用Python打印个九九乘法表
- python训练营免费领取-马哥教育官网-专业Linux培训班,Python培训机构
- python恶搞-如何用python和vbs恶搞基友?
- 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)
- 成都python工作-成都python就业