c++ vector删除多个元素方法
转自:https://blog.csdn.net/daofengdeba/article/details/7865229
在vector中由于有多个符合要求的元素需要删除,如果直接删除后,指针直接++就会出现问题,这是因为当erase后,iter就变成了一个野指针,对一个野指针++是一定会出现错误的。
vector<int> veci;
veci.push_back(1);
veci.push_back(2);
veci.push_back(3);
veci.push_back(4);
veci.push_back(5);
veci.push_back(3);
veci.push_back(2);
veci.push_back(3);
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++)
{
if( *iter == 3)
veci.erase(iter);
}
乍一看这段代码,很正常。其实这里面隐藏着一个很严重的错误:当veci.erase(iter)之后,iter就变成了一个野指针,对一个野指针进行 iter++ 是肯定会出错的。
查看MSDN,对于erase的返回值是这样描述的:An iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the vector if no such element exists,于是改代码:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++)
{
if( *iter == 3)
iter = veci.erase(iter);
}
这段代码也是错误的:1)无法删除两个连续的"3"; 2)当3位于vector最后位置的时候,也会出错(在veci.end()上执行 ++ 操作)
正确的代码应该为:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); )
{if( *iter == 3)iter = veci.erase(iter);elseiter ++ ;
}
c++ vector删除多个元素方法相关推荐
- vector删除指定值的方法
一.删除所有满足条件的元素 #include std::vector coll; - //remove all elements with value val auto iter = remove(c ...
- 几种php 删除数组元素方法
看一完整删除重复数组实例 代码如下 复制代码 //删除数组中的一个元素 function array_remove_value(&$arr, $var){ foreach ($arr as ...
- vector 删除元素的几种方法
vector 删除元素的几种方法 1.利用成员函数pop_back()可以删除最后一个元素: 2.利用成员函数erase()可以删除由一个iterator指出的元素: 3.通过STL中的算法库函数re ...
- vector删除元素
vector::erase()和algorithm中的remove(remove_if)函数都可以用来删除vector中的元素.但是其中也有些区别. (关于remove_if的使用,请参考我的博客:r ...
- C/C++ vector 删除指定元素
C++ vector 删除符合条件的元素 C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法. C++ 中std::remove()并不删除元素, ...
- 用一个vector删除另一个vector中的元素
为了解决项目中的一个问题,需要 用一个vector中指定的元素删除另一个vector 下面是我采用的解决方法: 比如说 有两个vector<int> vect1和vect2 vect1 = ...
- 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法
1. 添加新元素 动态添加新元素 Coffee Tea Coffee Tea var child = document.getElementsByClassName("child" ...
- JAVA中循环删除list中元素的方法总结
原文:http://www.cnblogs.com/aspirant/p/7900854.html 印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天 ...
- java 删除list元素_JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
最新文章
- 数据结构7.6_最短路径
- NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情)
- AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
- c# 备份oracle waitforexit()方法死锁,ProcessStartInfo挂在“WaitForExit”上?为什么?
- SQL Server之体系结构
- 【NeurIPS2020】Google点针图网络,Pointer Graph Networks
- vue excel导入mysql详细教程_Vue前端上传EXCEL文件,后端(springBoot+MyBatis+MySQL)解析EXCEL并批量插入/更新数据库...
- 论文阅读笔记(四)——ESPNetV2:A Light-weight Power Efficient and General Purpose Convolutional Neural Network
- jq跨域代理_JQuery前端跨域问题的七种解决方案
- windbg使用教程: 具体实例
- paip.提升效率----几款任务栏软件
- 浪潮之巅: 中国企业高管硅谷交流会
- 计算机相关审稿周期短的ei,计算机比较好发的sci期刊_比较水的计算机ei期刊_ei期刊计算机...
- 2022 年 前40道 ReactJS 面试问题和答案
- 附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
- 微信ios上下拉网页禁止
- 读取Excel工具类ExcelUtils
- box2d 碰撞检测_Box2d新系列 第四章 碰撞模块
- [野火]EBF i.MX6ULL
- 康耐视智能相机Insight内置FTP存图
热门文章
- 数据大放送之气候数据
- 一个普通码农在汽车领域的创业失败复盘!
- Power Pivot - 业务指标的DAX度量值
- jQuery Ajax相关api(重点)
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——实战二:简易登录+找回密码
- Snappy 1.1.7 源码编译以及验证
- 南柯一梦50178的分享
- vsan超融合基础架构数据丢失的解决过程
- c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...
- python---FlaskAPI基本用法