答案:vector的erase函数用于删除指定位置或范围元素,返回指向删除后下一元素的迭代器;可结合find删除特定值,推荐使用remove-erase惯用法删除满足条件的多个元素,注意迭代器失效与性能影响。

在C++中,vector 是一个动态数组容器,支持在运行时动态添加和删除元素。要删除 vector 中的元素,最常用的方法是使用 erase() 函数。下面详细介绍 erase 的用法以及一些常见操作。
erase() 基本语法
erase() 函数用于删除 vector 中指定位置或范围的元素,有以下两种主要形式:
- iterator erase(iterator pos); —— 删除单个元素
- iterator erase(iterator first, iterator last); —— 删除一个区间内的多个元素
函数返回值是一个迭代器,指向被删除元素之后的下一个元素。
删除单个元素
如果你想删除 vector 中某个特定位置的元素,比如第2个元素(索引为1),可以这样做:
立即学习“C++免费学习笔记(深入)”;
vectorvec.erase(vec.begin() + 1); // 删除索引为1的元素(即20)
// 现在 vec 内容为 {10, 30, 40}
删除一段范围的元素
你也可以删除从某个起始位置到结束位置之间的所有元素:
vectorvec.erase(vec.begin() + 1, vec.begin() + 4); // 删除 [1, 4) 范围内元素
// 即删除 20, 30, 40 → 结果为 {10, 50}
结合 find 删除指定值的元素
如果想删除某个具体值(例如删除所有等于30的元素),通常需要配合 std::find 或 循环 + 条件判断 使用。但注意:find 只能找到第一个匹配项。
#includevector
auto it = std::find(vec.begin(), vec.end(), 30);
if (it != vec.end()) {
vec.erase(it); // 找到后删除
}
// vec 变为 {10, 20, 40}
删除所有满足条件的元素(推荐使用 remove-erase 惯用法)
如果你要删除多个相同值或满足某种条件的元素,直接用 erase 配合循环可能出错(因为迭代器失效)。推荐使用 remove-erase 惯用法:
vec.erase(std::remove(vec.begin(), vec.end(), 30), vec.end());// 删除所有等于30的元素
或者使用 lambda 表达式删除满足条件的元素:
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int n) { return n > 30; }),
vec.end()
);
// 删除所有大于30的元素
注意事项
- erase 会改变 vector 大小,并使被删除位置之后的所有迭代器失效
- 对空位置调用 erase 会导致未定义行为,使用前应确保迭代器有效
- 频繁在中间删除元素效率较低(O(n)),因后续元素需前移;如需高频删改,考虑 list 或 deque











