vector.erase 和 remove区别
时间: 2024-08-29 21:02:35 浏览: 83
vector.erase
和remove
都是C++标准库中操作STL容器vector
的函数,但它们的作用和使用场景有所不同。
vector.erase
用于直接从vector
中删除指定位置或范围的元素,并返回已删除元素的数量。如果只是单纯地删除元素,不需要保留其新位置,则可以直接使用:
// 删除第一个匹配项
int pos = find(vector.begin(), vector.end(), target);
if (pos != vector.end()) {
vector.erase(pos);
}
// 删除一段连续的范围
vector.erase(start_range, end_range);
然而,remove
是一个辅助算法,它并不真正移除元素,而是改变待删除元素的相对顺序,将所有大于目标值的元素向后移动一位,然后返回指向最后一个需要删除的位置。实际上,你需要再调用一次erase
来实际移除这些元素:
std::vector<int> numbers = {5, 3, 4, 5, 6, 7};
int target = 5;
numbers.erase(remove(numbers.begin(), numbers.end(), target), numbers.end());
在这个例子中,remove
将所有5移动到序列末尾,然后erase
从原位置开始移除这些元素。
总结一下:
erase
直接删除元素并更新内部数据结构。remove
只修改元素顺序,不删除元素,需要配合erase
一起使用完成删除。
相关推荐


















