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++;

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值