vector.erase 和 remove区别
时间: 2024-08-29 12:02:35 浏览: 49
大家注意vector, list, set, map成员函数erase
`vector.erase`和`remove`都是C++标准库中操作STL容器`vector`的函数,但它们的作用和使用场景有所不同。
`vector.erase`用于直接从`vector`中删除指定位置或范围的元素,并返回已删除元素的数量。如果只是单纯地删除元素,不需要保留其新位置,则可以直接使用:
```cpp
// 删除第一个匹配项
int pos = find(vector.begin(), vector.end(), target);
if (pos != vector.end()) {
vector.erase(pos);
}
// 删除一段连续的范围
vector.erase(start_range, end_range);
```
然而,`remove`是一个辅助算法,它并不真正移除元素,而是改变待删除元素的相对顺序,将所有大于目标值的元素向后移动一位,然后返回指向最后一个需要删除的位置。实际上,你需要再调用一次`erase`来实际移除这些元素:
```cpp
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`一起使用完成删除。
阅读全文