C++---STL中迭代器失效的总结
我们在使用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中迭代器失效的总结相关推荐
- STL中迭代器的作用,有指针为何还要迭代器
请你来说一下STL中迭代器的作用,有指针为何还要迭代器 参考回答: 1.迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴 ...
- STL erase() 迭代器失效
STL中的容器按存储方式分为两类:序列容器(如:vector .deque.list):关联容器(如:set.map) 两种容器在使用erase方法来删除元素时或产生迭代器失效的问题 对于非顺序序列容 ...
- C++(STL):09---vector迭代器失效问题
在vector中,我们经常会使用迭代器iterator对vector中的元素进行索引,也经常需要将迭代器作为参数传递到vector的成员函数中,迭代器使用非常方便,但使用不当也会给我们带来巨大的麻烦, ...
- STL 容器迭代器失效总结
总结常见的序列容器(vector.deque.list)和关联容器(set.multiset.map.multimap)的迭代器失效问题. 原迭代器指的是进行操作之前保存的迭代器,包括begin(). ...
- 面试中常被问到(九)STL迭代器失效问题
STL容器中迭代器失效的场景: 以vector为例进行分析 vector进行数据插入 如果空间充足那组,插入数据后,原有数据向后移动,导致迭代器失效 如果空间不足,插入新数据需要扩容,则发生拷贝,导致 ...
- STL中容器vector迭代器失效的相关问题
迭代器失效,有两个层面的意思: 无法通过迭代器++,–操作遍历整个stl容器.记作: 第一层失效. 无法通过迭代器存取迭代器所指向的内存. 记作: 第二层失效. vector是个连续内存存储的容器,如 ...
- 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.在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化 ...
最新文章
- c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
- dbutility mysql_c# 数据库通用类DbUtility
- filco蓝牙不好用_2020双十二机械键盘选购 牌子推荐 附雷柏/ikbc/akko/杜伽/FILCO热销机械键盘品牌...
- python0o12_2020年日期表-python实现
- HTML / img src 使用绝对路径注意事项
- html5 jquery mobile,html5 jquery mobile
- 如何为SAP API Portal上创建的API增添API key验证保护功能
- 山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城
- xgboost算法_xgboost算法过程推导
- 十分钟完成的操作系统编写 你信吗?
- GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
- 【golang】golang获取客户端ip
- 面试产品经理,参考题目,考察点,简历筛选标准,总结
- 机器人控制器编程课程-教案02-基础
- 心理学推荐书籍——《九型人格》
- UTF-8、BOM、feff的问题
- 【设计】计数(一)基数计数
- openpyxl,给单元格插入公式,求和通过excel公式实现
- 隆重纪念鲁宾逊诞辰,不走样,不离谱
- Self-attention GAN
热门文章
- html+css面试题 行内元素padding和margin
- 5G计费方式将迎来彻底变化 运营商向2B服务出手?
- ansible+ssh自动化运维
- SpringAop通知
- Form各键盘触发子所对应的“按键”
- 需求工程:加强监理,规避风险(转载)续三
- 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
- RTOS原理与实现12:性能测量
- 计算机网络配置虚拟ip,好不好在电脑中设置虚拟IP地址?
- c语言gc,使用C++制作GC Server过程详解