【学习笔记】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}
相关推荐
weixin_421922691 分钟前
C++与Node.js集成
开发语言·c++·算法
j_xxx404_3 分钟前
力扣--分治(归并排序)算法题I:排序数组,交易逆序对的总数
数据结构·c++·算法·leetcode·排序算法
阳光永恒7363 分钟前
C++编程全套学习资料免费分享 | 从零基础到进阶(含视频课/PPT课件/源码/项目实战)
c++·学习·编程学习·免费资料·零基础学c++·c++资料
楼田莉子4 分钟前
C++高性能并发内存池:三种Cache的设计及其内存申请释放
c++·后端·链表·哈希算法·visual studio
暮冬-  Gentle°10 分钟前
设计模式在C++中的实现
开发语言·c++·算法
2501_9083298513 分钟前
实时音频处理C++实现
开发语言·c++·算法
dapeng287013 分钟前
移动语义与完美转发详解
开发语言·c++·算法
!停21 分钟前
C++基础入门(缺省参数,函数重载,引用)
开发语言·c++·算法
dapeng28702 小时前
分布式系统容错设计
开发语言·c++·算法
qq_417695052 小时前
代码热修复技术
开发语言·c++·算法