遇见的场景

删除vector容器指定元素时;

erase()函数的用法

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素。

具体用法如下:

iterator erase(iterator _Where);

删除指定位置的元素,返回值是一个迭代器,指向删除元素的下一个元素;

iterator erase( iterator _First, iterator _Last);

删除从_First开始到_Last位置的元素,返回值也是一个迭代器,指向最后一个删除元素的下一个位置。

erase()函数的注意点

注意1:调用erase()函数之后,vector后面的元素会向前移位,形成新的容器。这样被删除的元素对应的迭代器,此时会变成一个野指针。

注意2:删除最后一个元素时,it指向vec.end(),然后会对vec.end()之上执行++操作,从而出现段错误(见上一篇博客)。所以需要加入if判断来避免。

即下述代码为错

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

if(*it == target)

vec.erase(it);//此时it变为野指针,而不是指向vec的下一个元素。

}

erase()正确使用方式

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

if(*it == target)

it = vec.erase(it);//此时it指向被删除元素的下一个位置。

else

it++;

}

或者

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

if(*it == target)

auto it2 = it;

vec.erase(it2);//此时it指向被删除元素的下一个位置。

else

it++;

}

erase怎么用c语言,C++ erase()函数使用时的注意点相关推荐

  1. linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别

    Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码: local Animal ={}functionAnimal:Eat( food )print("Anim ...

  2. memmove函数使用时注意的问题

    首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...

  3. 关于ADAMS中AZ函数使用时的一些心得

    今天做仿真时,发现使用AZ函数时的一些注意事项: 一:          其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...

  4. c语言编写fun函数使其实现,函数式语言Corefun的设计与实现(全文完整版)

    <函数式语言Corefun的设计与实现.ppt>由会员分享,可免费在线阅读全文,更多与<函数式语言Corefun的设计与实现>相关文档资源请在帮帮文库(www.woc88.co ...

  5. C语言——写一个函数,使输入的一个字符串按反序存放

    #include <stdio.h> #include <string.h> int main() {char arr[100];scanf("%s",&a ...

  6. php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)

    前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下: 复制代码 代码如下: function _getHash($username) { $hash = crc32($usernam ...

  7. 一个memset函数使用时的坑

    平时使用memset函数都是用来初始化字符串,从来没有注意过它具体是怎么实现的,最近无意中发现原来这个函数里面还是有坑的. 我尝试用它来初始化整型数组 int array[10]; memset(ar ...

  8. GetMessage()函数使用时的注意

    GetMessage()函数是一个很常见的函数,如果使用SDK写过Windows程序的话,那么就更不陌生,该函数的返回值值得注意的地方,因为最近在看Win32汇编的书,书中提到了这个函数.但是发现对于 ...

  9. strstr(str1,str2)函数使用时注意事项

    可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...

最新文章

  1. mysql分区和分表比较_MySQL分区和分表的区别与联系
  2. 68页PPT,读懂中、美、德三国智能制造战略!
  3. iBATIS:xml中定义返回值
  4. 跳出数据计算拯救人工智能之打败机器学习方法详解
  5. 关于C#使用Shockwaveflash控件设计器不显示问题的解决方案
  6. 笔记本电脑可以做网站服务器,个人笔记本能做网站服务器吗
  7. matlab图像采集程序,用摄像头连续采集、保存图像源程序
  8. Python3调试类_io.BytesIO、_io.StringIO用法(Python3 IO编程之StringIO和BytesIO)
  9. matlab层次分析法程序购置设备,[转载]MATLAB实现层次分析程序
  10. SIP对话、事务详解
  11. 基于深度学习的搜索、推荐、广告系统最全最新论文分享
  12. 朱啸虎回应“美团滴滴合并”;小米成世界第四大手机制造商;Ant Design 3.26.1 发布 | 极客头条...
  13. strrstr php,php之字符串
  14. c语言笔记照片_C语言入门这一篇就够了-学习笔记
  15. Distribution download cancelled. Using distribution from 'https://services.gradle.org/distributions/
  16. mongodb系列之--mongodb 主从配置与说明
  17. jieba库初识与运用
  18. 三次B样条拟合及一阶导、二阶导、曲率计算
  19. 中国民用航空飞行学院 - 人事工资薪酬管理系统
  20. 浙江大学黄杨思博计算机学院,黄杨-江南大学 理学院

热门文章

  1. java 300dpi_使用java imageio 调整图片DPI,例如从72调整为300
  2. QPrinter设置DPI
  3. 全景图像拼接——相机参数评估
  4. java分页工具封装
  5. 对称密钥,非对称密钥,单向散列函数—William chu的学习之路(信息安全)
  6. ROS计算图——rqt_graph
  7. Hello, 2020!(桶排序)
  8. 【附源码】计算机毕业设计SSM校园二手物品交易系统
  9. 使用浏览器开发工具测试网站可访问性的七种方法
  10. linux配置dhcp服务器