vector和map用erase删除元素

1、vector的删除

       vector的删除中,可以有erase和pop_back函数。erase可以删除指定元素或指定位置的元素,而pop_back只能去掉数组的最后一个元素。这里我们讨论erase函数的用法。

       假设有如下程序:

vector vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
for (vector::iterator iter = vec.begin(); iter != vec.end(); iter++) {if (*iter == 3)vec.erase(iter);
}

       乍一看这段代码很正常,但这里面隐藏着一个很严重的错误:当vec.erase(iter)语句执行了之后,iter就变成了一个野指针,对一个野指针进行iter++操作是肯定会出错的。

       erase函数的返回值,是当前被删除元素的下一个元素的迭代器指针,于是改代码:

for (vector::iterator iter = vec.begin(); iter != vec.end(); iter++) {if (*iter == 3)iter = vec.erase(iter);
}

       这段代码也是错误的:① 无法删除两个连续的3;② 当数字3位于vector最后位置的时候,也会出错(在vec.end


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部