【学习笔记】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}
相关推荐
fqbqrr2 分钟前
2506C++,C++的时间库
c++
foDol7 分钟前
C++ 中的尾调用优化TCO:原理、实战与汇编分析
汇编·c++·性能优化
凌佚31 分钟前
rknn优化教程(二)
c++·opencv·目标检测
?!7141 小时前
算法打卡17天(补)
c++·算法·职场和发展
邪恶的贝利亚1 小时前
WebRTC 中 ICE 流程优化:SRS 轻量级部署与 NAT 类型检测实战
c++·webrtc·流媒体·ice
YKPG1 小时前
C++学习-入门到精通【17】自定义的模板化数据结构
数据结构·c++·学习
朝朝又沐沐2 小时前
基于算法竞赛的c++编程(28)结构体的进阶应用
开发语言·c++·算法
豪斯有话说2 小时前
C++_红黑树
开发语言·数据结构·c++
莱茵不哈哈2 小时前
C/C++八股文
开发语言·c++
Tanecious.3 小时前
C++--list的使用及其模拟实现
c++·list