std::vector erase 和remove如何配合使用
时间: 2025-01-29 16:03:43 浏览: 22
std::vector
是 C++ 标准库中的动态数组容器,提供了一对功能强大的方法 erase
和 remove
,用于处理元素的插入、删除操作。
std::vector<>::erase
函数用于从指定位置开始移除并返回一个元素范围,该范围内的所有元素都会被移动到被移除元素之后。其语法通常是:
iterator erase( iterator position );
iterator erase( iterator first, iterator last );
position
参数表示第一个要删除的元素的位置,first
和 last
则是一对迭代器,表示一个连续区间要被删除。
而 std::vector<>::remove
函数则用于将序列中满足特定条件的所有元素移到其后的合适位置,但不会真正删除它们,而是改变它们的相对顺序。它的原型如下:
void remove( iterator position, iterator new_end );
它接受一个起始位置 position
和一个新的结束边界 new_end
,移除范围内所有元素,但不改变容器大小。
当你需要同时移除并调整序列,通常的做法是先使用 remove
移动元素,然后用 erase
删除已经移动过的区域,以保持容器长度不变。例如:
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
auto it = std::find(v.begin(), v.end(), 5); // 找到值为5的位置
v.erase(it, it + 2); // 直接删除值为5及后续两个元素
it = std::find(v.begin(), v.end(), 5); // 现在find应该无法找到5了
v.erase(it, v.end()); // 使用remove后的结果删除剩余的5
在这个例子中,remove
将值为5的元素前移,erase
删除了两次查找得到的5。
阅读全文
相关推荐


















