【学习笔记】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}
相关推荐
会编程的小孩17 分钟前
C++ qt的安装
c++
小成202303202656 小时前
C++~07补充
开发语言·c++
hold?fish:palm6 小时前
40 二叉树的直径
c++·leetcode
解决小子7 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
lunar_coder8 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯8 小时前
C++进阶.多态
c++
凯瑟琳.奥古斯特9 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun6110 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
坤坤子吖10 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
qz_Serene10 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节