【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录

我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。

但一些场景中,我们又需要在执行删除操作,并继续遍历迭代器,那么可以通过以下的方式进行规避。

使用 erase 返回值继续迭代

erase 执行后,会返回下一个元素的新迭代器。

cpp 复制代码
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end();) {
    if (*it == 2) {  // 删除元素 2
        it = vec.erase(it);  // 返回 3 所在的新迭代器
    } else {
        ++it;  // 未删除时正常递增
    }
}
// 最终结果:vec = {1, 3, 4, 5}

使用索引进行遍历

cpp 复制代码
std::vector<int> vec = {1, 2, 3, 4, 5};
for (size_t i = 0; i < vec.size();) {
    if (vec[i] == 2) {
        vec.erase(vec.begin() + i);
    } else {
        ++i;
    }
}
// 最终结果:vec = {1, 3, 4, 5}
相关推荐
进击的荆棘27 分钟前
优选算法——滑动窗口
c++·算法·leetcode
_F_y7 小时前
MySQL用C/C++连接
c语言·c++·mysql
兩尛8 小时前
c++知识点2
开发语言·c++
xiaoye-duck8 小时前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
Azure_withyou8 小时前
Visual Studio中try catch()还未执行,throw后便报错
c++·visual studio
琉染云月9 小时前
【C++入门练习软件推荐】Visual Studio下载与安装(以Visual Studio2026为例)
c++·visual studio
L_090710 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
智者知已应修善业14 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德14 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei14 小时前
模板编译期类型检查
开发语言·c++·算法