【学习笔记】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}
相关推荐
晚风吹红霞14 分钟前
C++异常处理核心知识点全解析
开发语言·c++
CoderCodingNo15 分钟前
【信奥业余科普】C++ 的奇妙之旅 | 17:面的铺展与文本的本质——二维数组与字符串
开发语言·c++
迷途之人不知返32 分钟前
优先级队列:priority_queue
数据结构·c++
曦夜日长36 分钟前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用
java·开发语言·c++
代码中介商38 分钟前
C++ STL 标准模板库完全指南:从容器到迭代器
开发语言·c++·stl
winner888140 分钟前
C++ 构造函数、析构函数、虚函数、虚析构
开发语言·c++
想唱rap41 分钟前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
许长安44 分钟前
protobuf 使用详解
c++·经验分享·笔记·中间件
Soley1 小时前
用 Boost.Log 封装一个更顺手的 C++17 日志库:GoodLog
c++
HAPPY酷1 小时前
从Public到Private:UE5 C++类创建路径差异全解析
java·c++·ue5