C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
2023-09-11 14:17:25 时间
序列性容器::(vector和list和deque)
erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被
删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方
式,但是erase的返回值为下一个有效的迭代器,所以
正确方法为::
for( iter = c.begin(); iter != c.end(); )
iter = c.erase(iter);
关联性容器::(map和set比较常用)
erase迭代器只是被删元素的迭代器失效,但是返回值为void,
所以要采用erase(iter++)的方式删除迭代器,
正确方法为::
for( iter = c.begin(); iter != c.end(); )
c.erase(iter++);
Tips:
其实对于list两种方式都可以正常工作
相关文章
- C++:std::map的遍历
- C++实现车轮轨迹
- c++ 中const 原理
- C++ 用自定义函数验证高等数学的定积分例题
- PCA 实现点云粗配准(C++版)
- Android JNI语法之--C++--list、set、map用法
- 搜狗面试的经典题(C++map按值排序,class struct的差别)
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 解答私信@被c++折磨头秃的花季美少女 //C++ 利用指针数组输入10个单词,编写函数对10个单词进行排序并输出,要求判断是否有相同的单词,如果有相同的单词在输出时该单词只输出一次。
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- 解答私信@被c++折磨头秃的花季美少女 //C++ 写一个带命令行参数的程序,可以实现将参数求和、求平均值以及排序之后输出(参数的数量不确定)。
- C++ifstream读取文件操作
- C++ map用法总结(整理)
- 【C++学习笔记】存储类
- c++ map 迭代删除
- c++ map 根据value排序 map来单词计数
- c++ stl algorithm: std::find, std::find_if
- C++ STL源代码学习(map,set内部heap篇)
- C++ 指针
- HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
- Dart基础第6篇:集合类型List Set Map详解 以及循环语句 forEach map where any every
- 【C++】第十一篇(基础)STL map创建、遍历、插入、删除等(详解)
- C++搭建集群聊天室(十六):代码测试文档
- C++的学习心得和知识总结 第十五章(完美结束)内容极为重要