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() 迭代器失效相关推荐

  1. C++---STL中迭代器失效的总结

    我们在使用STL底层给我们提供的一些容器的时候,当我们给一个容器中增加(insert)或删除(erase),最有可能出现迭代器失效. 什么是迭代器失效 在对容器进行操作的时候,由于一些操作,使得元素保 ...

  2. STL 容器迭代器失效总结

    总结常见的序列容器(vector.deque.list)和关联容器(set.multiset.map.multimap)的迭代器失效问题. 原迭代器指的是进行操作之前保存的迭代器,包括begin(). ...

  3. C++(STL):09---vector迭代器失效问题

    在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦, ...

  4. 【C++】vector的模拟实现@STL —— 迭代器失效问题

    vector的模拟实现@STL 1. (constructor) & (destructor) 2. 一系列基本接口 2.1 size & capacity 2.2 [] 2.3 it ...

  5. STL的erase()陷阱-迭代器失效总结

    下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...

  6. 容器删除元素后迭代器失效_STL 4: STL之容器:选择时机,删除元素,迭代器失效...

    一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...

  7. STL源码剖析---STL容器特征总结(含迭代器失效)

    Vector 1.内部数据结构:连续存储,例如数组. 2.随机访问每个元素,所需要的时间为常量. 3.在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化 ...

  8. STL源码剖析---迭代器失效小结

    迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针.但它又不是我们所谓普通的指针 ...

  9. STL中容器vector迭代器失效的相关问题

    迭代器失效,有两个层面的意思: 无法通过迭代器++,–操作遍历整个stl容器.记作: 第一层失效. 无法通过迭代器存取迭代器所指向的内存. 记作: 第二层失效. vector是个连续内存存储的容器,如 ...

最新文章

  1. linux下unzip解压报错“symlink error: File name too long”怎么办?提供解决方案。
  2. windows下安装nodejs及框架express
  3. 7 Java NIO Selector-翻译
  4. 组会PPT20200522《Summary of Study and Research from May 8 to May 21》
  5. Spring vs Seam
  6. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现
  7. 计算机路表配置命令,计算机、华为交换机、路由器配置命令表
  8. 2017.4.2 loli测试
  9. 二次优化问题dfp_MATLAB优化问题应用实例讲解
  10. Android功能点(一)——判断网络是否真正连通
  11. python音频提取pcm_python pcm音频添加头转成Wav格式文件的方法
  12. 算法:回溯十五 Palindrome Partitioning字符串的字符串为回文所有解集合(2中解法)
  13. 無題(後改為總有那麼一句話)
  14. 洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
  15. 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
  16. 小提琴机器人拉法_手工小提琴价格,小提琴左手持琴姿势和肩托的使用
  17. 并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
  18. 2021年全球电子雪茄行业调研及趋势分析报告
  19. MoviePy - 中文文档4-MoviePy实战案例-给MoviePy Logo做一个闪动的阴影效果
  20. Python 详解计算 Median Absolute Deviation(绝对中位偏差)| 还可用于异常值检测

热门文章

  1. python变量类型-Python变量类型
  2. 有道精品课python-115批量转存与提取sha1工具2020下载
  3. python下载代码-Python3----下载小说代码
  4. python文件读取数据-Python从文件中读取数据
  5. python怎么读excel文件-python如何读写excel文件
  6. python乘法口诀编程-中年大叔学编程-用Python打印个九九乘法表
  7. python训练营免费领取-马哥教育官网-专业Linux培训班,Python培训机构
  8. python恶搞-如何用python和vbs恶搞基友?
  9. 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)
  10. 成都python工作-成都python就业