erase怎么用c语言,C++ erase()函数使用时的注意点
遇见的场景
删除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()函数使用时的注意点相关推荐
- linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码: local Animal ={}functionAnimal:Eat( food )print("Anim ...
- memmove函数使用时注意的问题
首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...
- 关于ADAMS中AZ函数使用时的一些心得
今天做仿真时,发现使用AZ函数时的一些注意事项: 一: 其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...
- c语言编写fun函数使其实现,函数式语言Corefun的设计与实现(全文完整版)
<函数式语言Corefun的设计与实现.ppt>由会员分享,可免费在线阅读全文,更多与<函数式语言Corefun的设计与实现>相关文档资源请在帮帮文库(www.woc88.co ...
- C语言——写一个函数,使输入的一个字符串按反序存放
#include <stdio.h> #include <string.h> int main() {char arr[100];scanf("%s",&a ...
- php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)
前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下: 复制代码 代码如下: function _getHash($username) { $hash = crc32($usernam ...
- 一个memset函数使用时的坑
平时使用memset函数都是用来初始化字符串,从来没有注意过它具体是怎么实现的,最近无意中发现原来这个函数里面还是有坑的. 我尝试用它来初始化整型数组 int array[10]; memset(ar ...
- GetMessage()函数使用时的注意
GetMessage()函数是一个很常见的函数,如果使用SDK写过Windows程序的话,那么就更不陌生,该函数的返回值值得注意的地方,因为最近在看Win32汇编的书,书中提到了这个函数.但是发现对于 ...
- strstr(str1,str2)函数使用时注意事项
可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...
最新文章
- mysql分区和分表比较_MySQL分区和分表的区别与联系
- 68页PPT,读懂中、美、德三国智能制造战略!
- iBATIS:xml中定义返回值
- 跳出数据计算拯救人工智能之打败机器学习方法详解
- 关于C#使用Shockwaveflash控件设计器不显示问题的解决方案
- 笔记本电脑可以做网站服务器,个人笔记本能做网站服务器吗
- matlab图像采集程序,用摄像头连续采集、保存图像源程序
- Python3调试类_io.BytesIO、_io.StringIO用法(Python3 IO编程之StringIO和BytesIO)
- matlab层次分析法程序购置设备,[转载]MATLAB实现层次分析程序
- SIP对话、事务详解
- 基于深度学习的搜索、推荐、广告系统最全最新论文分享
- 朱啸虎回应“美团滴滴合并”;小米成世界第四大手机制造商;Ant Design 3.26.1 发布 | 极客头条...
- strrstr php,php之字符串
- c语言笔记照片_C语言入门这一篇就够了-学习笔记
- Distribution download cancelled. Using distribution from 'https://services.gradle.org/distributions/
- mongodb系列之--mongodb 主从配置与说明
- jieba库初识与运用
- 三次B样条拟合及一阶导、二阶导、曲率计算
- 中国民用航空飞行学院 - 人事工资薪酬管理系统
- 浙江大学黄杨思博计算机学院,黄杨-江南大学 理学院