【学习笔记】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}
相关推荐
一匹电信狗15 小时前
【C++】手搓AVL树
服务器·c++·算法·leetcode·小程序·stl·visual studio
秋空樱雨16 小时前
C++入门
开发语言·c++
咬_咬16 小时前
C++仿mudo库高并发服务器项目:Buffer模块
服务器·开发语言·c++·缓冲区·buffer·muduo库
敲代码的瓦龙16 小时前
西邮移动应用开发实验室2025年二面题解
开发语言·c++·算法
晚风残16 小时前
【C++ Primer】第十七章:标准库特殊设施
开发语言·c++
qq_4335545417 小时前
C++ 双向循环链表
开发语言·c++·链表
Larry_Yanan17 小时前
QML学习笔记(四十六)QML与C++交互:Q_PROPERTY宏映射
c++·笔记·qt·学习·ui·交互
再睡一夏就好18 小时前
【C++闯关笔记】深究继承
java·数据结构·c++·stl·学习笔记
mjhcsp18 小时前
C++ char 类型深度解析:字符与字节的双重身份
开发语言·c++·char
jikiecui19 小时前
信奥崔老师:实数型: float、double
c++·算法