转自: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删除多个元素方法相关推荐

  1. vector删除指定值的方法

    一.删除所有满足条件的元素 #include std::vector coll; - //remove all elements with value val auto iter = remove(c ...

  2. 几种php 删除数组元素方法

    看一完整删除重复数组实例  代码如下 复制代码 //删除数组中的一个元素 function array_remove_value(&$arr, $var){ foreach ($arr as ...

  3. vector 删除元素的几种方法

    vector 删除元素的几种方法 1.利用成员函数pop_back()可以删除最后一个元素: 2.利用成员函数erase()可以删除由一个iterator指出的元素: 3.通过STL中的算法库函数re ...

  4. vector删除元素

    vector::erase()和algorithm中的remove(remove_if)函数都可以用来删除vector中的元素.但是其中也有些区别. (关于remove_if的使用,请参考我的博客:r ...

  5. C/C++ vector 删除指定元素

    C++ vector 删除符合条件的元素 C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法. C++ 中std::remove()并不删除元素, ...

  6. 用一个vector删除另一个vector中的元素

    为了解决项目中的一个问题,需要 用一个vector中指定的元素删除另一个vector 下面是我采用的解决方法: 比如说 有两个vector<int> vect1和vect2 vect1 = ...

  7. 原生js清空上一个元素内容_原生JS实现动态添加新元素、删除元素方法

    1. 添加新元素 动态添加新元素 Coffee Tea Coffee Tea var child = document.getElementsByClassName("child" ...

  8. JAVA中循环删除list中元素的方法总结

    原文:http://www.cnblogs.com/aspirant/p/7900854.html 印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天 ...

  9. java 删除list元素_JAVA中循环删除list中元素的方法总结

    印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...

最新文章

  1. 数据结构7.6_最短路径
  2. NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情)
  3. AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
  4. c# 备份oracle waitforexit()方法死锁,ProcessStartInfo挂在“WaitForExit”上?为什么?
  5. SQL Server之体系结构
  6. 【NeurIPS2020】Google点针图网络,Pointer Graph Networks
  7. vue excel导入mysql详细教程_Vue前端上传EXCEL文件,后端(springBoot+MyBatis+MySQL)解析EXCEL并批量插入/更新数据库...
  8. 论文阅读笔记(四)——ESPNetV2:A Light-weight Power Efficient and General Purpose Convolutional Neural Network
  9. jq跨域代理_JQuery前端跨域问题的七种解决方案
  10. windbg使用教程: 具体实例
  11. paip.提升效率----几款任务栏软件
  12. 浪潮之巅: 中国企业高管硅谷交流会
  13. 计算机相关审稿周期短的ei,计算机比较好发的sci期刊_比较水的计算机ei期刊_ei期刊计算机...
  14. 2022 年 前40道 ReactJS 面试问题和答案
  15. 附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
  16. 微信ios上下拉网页禁止
  17. 读取Excel工具类ExcelUtils
  18. box2d 碰撞检测_Box2d新系列 第四章 碰撞模块
  19. [野火]EBF i.MX6ULL
  20. 康耐视智能相机Insight内置FTP存图

热门文章

  1. 数据大放送之气候数据
  2. 一个普通码农在汽车领域的创业失败复盘!
  3. Power Pivot - 业务指标的DAX度量值
  4. jQuery Ajax相关api(重点)
  5. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——实战二:简易登录+找回密码
  6. Snappy 1.1.7 源码编译以及验证
  7. 南柯一梦50178的分享
  8. vsan超融合基础架构数据丢失的解决过程
  9. c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...
  10. python---FlaskAPI基本用法