我们在使用STL底层给我们提供的一些容器的时候,当我们给一个容器中增加(insert)或删除(erase),最有可能出现迭代器失效。

什么是迭代器失效

在对容器进行操作的时候,由于一些操作,使得元素保存的位置发生改变,从而使得对指向原来位置的迭代器操作时发生错误。
例如

  • ++操作:迭代器失效以后,我们没有办法通过++操作遍历容器中的数据。
  • 无法通过迭代器直接存取数据。

STL迭代器失效的场景

vector容器
  • 由于vector底层是一个连续的空间,我们对其进行插入(push_back)操作的时候,容易出现扩容的情况,会导致迭代器失效。
  • 删除操作(erase,pop_back),则指向删除操作节点的迭代器会失效。

解决办法:
在出现迭代器失效的位置重新获取一下迭代器。

//arr为一个vector对象,删除元素num
for(auto &it:arr)
{if(it == num){   it = arr.erase(it);}
}
list

由于list底层是一个带头节点的双向链表,所以不会出现扩容,因此list迭代器失效的主要场景是删除(earse)操作。

解决办法

重新获取新的迭代器。

it = li.erase(it);

C++---STL中迭代器失效的总结相关推荐

  1. STL中迭代器的作用,有指针为何还要迭代器

    请你来说一下STL中迭代器的作用,有指针为何还要迭代器 参考回答: 1.迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴 ...

  2. STL erase() 迭代器失效

    STL中的容器按存储方式分为两类:序列容器(如:vector .deque.list):关联容器(如:set.map) 两种容器在使用erase方法来删除元素时或产生迭代器失效的问题 对于非顺序序列容 ...

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

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

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

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

  5. 面试中常被问到(九)STL迭代器失效问题

    STL容器中迭代器失效的场景: 以vector为例进行分析 vector进行数据插入 如果空间充足那组,插入数据后,原有数据向后移动,导致迭代器失效 如果空间不足,插入新数据需要扩容,则发生拷贝,导致 ...

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

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

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

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

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

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

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

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

最新文章

  1. c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
  2. dbutility mysql_c# 数据库通用类DbUtility
  3. filco蓝牙不好用_2020双十二机械键盘选购 牌子推荐 附雷柏/ikbc/akko/杜伽/FILCO热销机械键盘品牌...
  4. python0o12_2020年日期表-python实现
  5. HTML / img src 使用绝对路径注意事项
  6. html5 jquery mobile,html5 jquery mobile
  7. 如何为SAP API Portal上创建的API增添API key验证保护功能
  8. 山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城
  9. xgboost算法_xgboost算法过程推导
  10. 十分钟完成的操作系统编写 你信吗?
  11. GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
  12. 【golang】golang获取客户端ip
  13. 面试产品经理,参考题目,考察点,简历筛选标准,总结
  14. 机器人控制器编程课程-教案02-基础
  15. 心理学推荐书籍——《九型人格》
  16. UTF-8、BOM、feff的问题
  17. 【设计】计数(一)基数计数
  18. openpyxl,给单元格插入公式,求和通过excel公式实现
  19. 隆重纪念鲁宾逊诞辰,不走样,不离谱
  20. Self-attention GAN

热门文章

  1. html+css面试题 行内元素padding和margin
  2. 5G计费方式将迎来彻底变化 运营商向2B服务出手?
  3. ansible+ssh自动化运维
  4. SpringAop通知
  5. Form各键盘触发子所对应的“按键”
  6. 需求工程:加强监理,规避风险(转载)续三
  7. 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
  8. RTOS原理与实现12:性能测量
  9. 计算机网络配置虚拟ip,好不好在电脑中设置虚拟IP地址?
  10. c语言gc,使用C++制作GC Server过程详解