【c&c++】erase怎么用c语言,C++ erase()函数使用时的注意点

发布时间 2023-05-31 10:08:26作者: opensmarty

遇见的场景

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

}

【参考连接】

C/C++语言中erase()函数的用法