博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vector中erase的用法
阅读量:7070 次
发布时间:2019-06-28

本文共 919 字,大约阅读时间需要 3 分钟。

//在循环中使用erase需要避免的错误

//erase的函数原型有两种形式:

//iterator erase(iterator position);
//iterator erase(iterator first, iterator last); 左闭右开 [first,last)

vector
v1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 9, 10, 9 };

错误示例1

for (auto p1 = v1.begin(); p1 != v1.end();p1++){    if (*p1 == 9)    {        v1.erase(p1);    }}//p1被erase以后,变成了一个“野迭代器”,对其进行++操作会发生未定义的错误

Return value

An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

会返回指向删掉的元素后面第一个元素的迭代器,如果删掉的是最后一个元素,返回.end()

错误示例2

for (auto p1 = v1.begin(); p1 != v1.end();p1++){    if (*p1 == 9)    {        p1=v1.erase(p1);    }}

1)无法删除两个连续的9; 2)当9位于vector最后位置的时候,也会出错(在ve.end()上执行 ++ 操作)

正确示例

for (auto p1 = v1.begin(); p1 != v1.end();){    if (*p1 == 9)    {        p1=v1.erase(p1);    }    else    {        p1++;    }}

转载地址:http://xghll.baihongyu.com/

你可能感兴趣的文章
聚集索引,非聚集索引,唯一索引,索引视图
查看>>
云计算不敷物联网时代所需 “雾计算”应运而生
查看>>
金融安全资讯精选 2017年第十一期 银行木马利用VMvare进行传播 研究人员发现新型安卓银行木马Red Alert...
查看>>
路由器长期开着可以吗?不关有什么危害吗?
查看>>
这是我看过的最牛的编码套路,给大家分享下
查看>>
阿里云数据库挑战赛"SQL优化大师"获奖案例
查看>>
PSR-3
查看>>
表格存储如何实现高可靠和高可用
查看>>
初探JavaScript——JS另类的作用域和声明提前
查看>>
基于安卓系统的5款录音App
查看>>
Pinterest开源Kafka集群自愈和工作负载均衡工具:DoctorKafka
查看>>
英伟达推出信用卡大小的“超级计算机” 旨在实现便携式AI
查看>>
深度剖析俄罗斯黑客组织APT29的后门
查看>>
九月揭幕,上海再迎云计算“干货”盛筵
查看>>
前雅虎CTO:Hadoop扩展过程中的7个危险信号
查看>>
阿里Q2财报:云计算增速106%超越亚马逊
查看>>
C#中Dictionary的内部实现剖析
查看>>
再潮的技术也离不开数据—2017关于数据的三个趋势
查看>>
如何使用SIOC存储策略优化负载性能?
查看>>
确保数据中心工作人员人身安全的三种举措
查看>>