当前位置: 首页 > 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.dtcms.com/a/285001.html

相关文章:

  • 从一到无穷大 #48:Vector Bucket,S3如何把向量玩成新范式?
  • imx6ull-系统移植篇9——bootz启动 Linux 内核
  • Spark 之 HashJoin
  • Langchain和Faiss搭建本地知识库对比
  • python东方财富api股票数据获取程序
  • Vue3从入门到精通
  • Django `transaction.atomic()` 完整使用指南
  • SWD和JTAG区别
  • 【47】MFC入门到精通——MFC编辑框 按回车键 程序闪退问题 ,关闭 ESC程序退出 问题
  • git merge 和 git rebase 的区别
  • LoRA:大模型低秩适配技术全景——原理、演进与高效微调革命
  • MongoDB社区版安装(windows)
  • 第4.3节 iOS App生成追溯关系
  • 联发科MT6897 5G智能手机应用处理器 软件寄存器表:通用闪存(UFS)
  • Kafka——无消息丢失配置怎么实现?
  • C++:list
  • 博客摘录「 Springboot入门到精通(超详细文档)」2025年7月4日
  • ubuntu 22.02 带外进单用户拯救系统
  • 人工智能之数学基础:概率论和数理统计在机器学习的地位
  • 什么是 M4A 和 WAV?这两种音频互转会导致音质发生变化吗
  • python爬虫入门(小白五分钟从入门到精通)
  • 振石股份闯关上市:业绩连降,资产、负债两端暗藏隐忧
  • leetcode 3202. 找出有效子序列的最大长度 II 中等
  • 18650锂电池点焊机:新能源制造的精密纽带
  • Unreal5从入门到精通之如何实现第一人称和第三人称自由切换
  • 电脑重启后快速找回历史复制内容的实操方法
  • YOLOv8 PTQ、QAT量化及其DepGraph剪枝等压缩与加速推理有效实现(含代码)
  • Leetcode 494. 目标和
  • 力扣 hot100 Day47
  • #systemverilog# 关键字之 protected 用法