当前位置: 首页 > news >正文

关于vector中的erase的强调

1.问题一

我们来看一串代码,这串代码利用erase函数删除了数值为3的元素,但是其实他的迭代器已经失效了(虽然从原理上来讲他之后的元素会往前移动一位),包括指向被删除元素及其之后元素的迭代器都失效。此时如果继续对it迭代器进行操作,会产生未定义行为。例如下面这串代码,会显示如下错误。

#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int>v = { 1,2,3,4,5 };for (auto it=v.begin();it!=v.end();it++){if (*it == 3){v.erase(it);}}
}

那么该如何避免这种情况呢,那就是利用erase的返回值,他会返回一个新的指向后面的元素的迭代器,我们可以利用这个来更新it值,具体如下

for (auto it = v.begin(); it != v.end(); ) {if (*it == 3) {it = v.erase(it); // 更新 it 为 erase 返回的新迭代器} else {++it;}
}

http://www.lryc.cn/news/591495.html

相关文章:

  • Leetcode刷题营第二十八题:二叉树的前序遍历
  • Effective Python 条款7 用列表推导来取代map和filter
  • c++之 KMP 讲解
  • 网络原理 —— HTTP
  • 深入理解Collections.addAll方法
  • Python 离线安装 PyInstaller 的完整步骤(以python3.11.4-amd64.exe为例)
  • Trae IDE:打造完美Java开发环境的实战指南
  • 产品经理如何绘制服务蓝图(Service Blueprint)
  • 基于5G系统的打孔LDPC编码和均匀量化NMS译码算法matlab性能仿真
  • Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
  • 线程(三) linux 同步
  • .NET Framework版本信息获取(ASP.NET探针),获取系统的.NET Framework版本
  • pycharm提交项目到github及问题解决
  • ubuntu基础搭建
  • 【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
  • 基于单片机公交车报站系统/报站器
  • 分支和循环语句
  • Kotlin集合与空值
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • 学习 Flutter (四):玩安卓项目实战 - 中
  • 【LeetCode 热题 100】230. 二叉搜索树中第 K 小的元素——中序遍历
  • Java全栈面试实录:从电商支付到AIGC的深度技术挑战
  • HTML常用标签汇总(精简版)
  • Easy ARM2132
  • 测试学习之——Pytest Day3
  • 【git】使用教程
  • HTTP 状态码笔记
  • element-plus——图标推荐
  • milvus向量数据库连接测试 和 集合维度不同搜索不到内容
  • 嵌入式时钟系统