首页 > 其他分享 >vector的Erase相关

vector的Erase相关

时间:2024-03-19 20:56:13浏览次数:23  
标签:begin 元素 迭代 Erase 50 Vect vector erase 相关

	vector<int>Vect;

	Vect.insert(Vect.begin()+2, 50);


	for (auto it=Vect.begin();it!=Vect.end();++it)
	{

		if (*it==50)
		{
			Vect.erase(it);

		}


	}

为什么以上的代码会报错,而下面的一段代码不会报错?

	vector<int>Vect;

    Vect.insert(Vect.begin()+2, 50);

	for (auto it=Vect.begin();it!=Vect.end();++it)
	{
		if (*it==50)
		{
			it = Vect.erase(it);
		}

	}

原因:从容器中删除(erase)一个元素时,被删除元素的迭代器(以及所有后续元素的迭代器)会变成失效状态。这意味着,如果您尝试在 erase 操作后继续使用原迭代器进行循环迭代,您将使用一个已经失效的迭代器。这种行为是未定义的,可能导致运行时错误或程序崩溃。

当执行 Vect.erase(it) 后,it 已经失效,因此无法安全地执行 ++it 进行下一次循环迭代。

代码更改后:

这样处理因为 erase 方法返回一个指向被删除元素下一个元素的迭代器。这意味着,it 立即更新为一个有效的迭代器,指向下一个元素,或在删除末尾元素时指向 Vect.end()。这样,您就能安全地继续循环,因为确保了每一步都在使用有效的迭代器。

这是处理这类问题的一种常见方法,确保了迭代器在任何时候都是有效的,避免了未定义行为的风险。

修正后的循环正确处理了迭代器的更新,从而避免了在删除元素后继续使用失效迭代器的问题。

标签:begin,元素,迭代,Erase,50,Vect,vector,erase,相关
From: https://www.cnblogs.com/VisionSeven/p/18083916

相关文章

  • Qt+vs2019+PCL1.12.1+VTK9.1环境搭建中的相关问题
    目录1.VS中双击Ui文件无法打开2.VTK9.0以后在QtDesigner中找不到QVTKWidget组件3.无法打开源文件"QVTKOpenGLNativeWidget.h"4.无法打开源文件"QOpenGLWidget"5.QWidget:MustconstructaQApplicationbeforeaQWidget6.无法打开源文件"QtWidgets/QApplicati......
  • remove vs. erase 【TODO】
    erase:说明:Removesfromthelistcontainereitherasingleelement(position)orarangeofelements([first,last)).Thiseffectivelyreducesthecontainersizebythenumberofelementsremoved,whicharedestroyed.以iterator为单元,对元素进行清除。返回值:Anit......
  • 类中的相关方法
    类中的相关方法classDog(): #普通无参方法""" 只能通过类进行调用""" deftail(): print("小狗喜欢摇尾巴") #绑定到对象的方法""" 对象调用时候的时候默认传递对象本身 类调用的时候需要传递一个对象""" defwang(self):......
  • linux 查看防火墙相关命令
    linux查看防火墙相关命令 1.查看防火墙状态systemctlstatusfirewalld2.启动防火墙systemctlstart/restartfirewalld3.停止防火墙 临时停用,重启后失效systemctlstopfirewalld4.永久停止防火墙systemctldisablefirewalld5.开机启动systemctlenab......
  • STL:vector中如何使用at()来避免程序报错
     #include<iostream>#include<vector>usingnamespacestd;intmain(){ vector<int>Vec; for(inti=0;i<30;i++) { Vec.push_back(i); //cout<<Vec.size()<<endl; //cout<<Vec.capacity()<......
  • sql语句基础语法之 数据表的添加相关 ​字段相关操作 ​数据筛选相关操作 ​数据排序
    3月18日数据表的筛选数据,字段操作,聚合函数内容如下:​数据表的添加相关​字段相关操作​数据筛选相关操作​数据排序相关操作​聚合函数数据表的添加相关usemydb;createtableclass_img(`id`intuniquekeyauto_incrementcomment'序号',`grade`i......
  • 代码随想录算法训练营第十四天| 二叉树相关
    二叉树的递归遍历递归三要素:确定递归函数的参数和返回值,确定终止条件,确定单层递归的逻辑144.二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/description/publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>......
  • Pytorch相关错误及解决方案
    Pytorch相关错误及解决方案AttributeError:module'resource'hasnoattribute'getpagesize错误信息AttributeError:module'resource'hasnoattribute'getpagesize错误描述在Pycharm中启动JupyterNotebook时,弹窗此错误。解决方案发现是因为我在项目的目录中......
  • ip 网络相关
    1.私有ip段请注意,对于私有IP地址(如以10.x.x.x、172.16.x.x-172.31.x.x和192.168.x.x开头的地址),它们通常用于内部网络,因此无法确定其具体的服务提供商和归属地。对于公共IP地址,由于网络配置和服务提供商的变化,上述提供的信息可能并不完全准确。为了获取最准确的信息,建......
  • 服务器相关知识点总结
    一、服务器概述1.服务器的定义服务器是计算机的一种,是网络中为客户端计算机提供各种服务的高性能的计算机。服务器在网络操作系统的控制下,将与其连接的硬盘、磁带、打印机以及昂贵的专用通讯设备提供给网络上的客户站点共享,也能为网络用户提供集中计算、信息发布及数据管理......