c++ vector删除元素 c++ vector erase用法

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

c++ vector删除元素 c++ vector erase用法

在C++中,vector 是一个动态数组容器,支持在运行时动态添加和删除元素。要删除 vector 中的元素,最常用的方法是使用 erase() 函数。下面详细介绍 erase 的用法以及一些常见操作。

erase() 基本语法

erase() 函数用于删除 vector 中指定位置或范围的元素,有以下两种主要形式:

iterator erase(iterator pos); —— 删除单个元素 iterator erase(iterator first, iterator last); —— 删除一个区间内的多个元素

函数返回值是一个迭代器,指向被删除元素之后的下一个元素。

删除单个元素

如果你想删除 vector 中某个特定位置的元素,比如第2个元素(索引为1),可以这样做:

立即学习“C++免费学习笔记(深入)”;

vector vec = {10, 20, 30, 40};
vec.erase(vec.begin() + 1); // 删除索引为1的元素(即20)
// 现在 vec 内容为 {10, 30, 40}

删除一段范围的元素

你也可以删除从某个起始位置到结束位置之间的所有元素:

vector vec = {10, 20, 30, 40, 50};
vec.erase(vec.begin() + 1, vec.begin() + 4); // 删除 [1, 4) 范围内元素
// 即删除 20, 30, 40 → 结果为 {10, 50}

结合 find 删除指定值的元素

如果想删除某个具体值(例如删除所有等于30的元素),通常需要配合 std::find循环 + 条件判断 使用。但注意:find 只能找到第一个匹配项。

#include gorithm>
vector vec = {10, 20, 30, 40};
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基本上就这些。掌握 erase 和 remove-erase 惯用法,就能高效处理 vector 元素删除问题。

以上就是c++++ vector删除元素 c++ vector erase用法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1486175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 09:35:02
下一篇 2025年12月19日 09:35:11

相关推荐

发表回复

登录后才能评论
关注微信