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