如何按索引从 std::vector<> 中删除元素?

新手上路,请多包涵

我有一个 std::vector,我想删除第 n 个元素。我怎么做?

 std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);

原文由 dau_man 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.7k
2 个回答

要删除单个元素,您可以执行以下操作:

 std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

// Deletes the second element (vec[1])
vec.erase(std::next(vec.begin()));

或者,一次删除多个元素:

 // Deletes the second through third elements (vec[1], vec[2])
vec.erase(std::next(vec.begin(), 1), std::next(vec.begin(), 3));

原文由 mmmmmmmm 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要使用标准模板库的 std::vector::erase 功能。

示例:从向量中删除元素(使用索引)

 // Deleting the eleventh element from vector vec
vec.erase( vec.begin() + 10 );

上面代码的解释

std::vector<T,Allocator>::erase 用法:

 iterator erase (iterator position); // until C++11

 iterator erase( const_iterator pos ); // since C++11 and until C++20

 constexpr iterator erase( const_iterator pos ); // since C++20

这里有一个参数 position 它是一个迭代器,指向要从向量中删除的单个元素。成员类型 iteratorconst_iterator 是指向元素的随机访问迭代器类型。

这个怎么运作

erase 函数执行以下操作:

  • 它从向量中删除单个元素( position )或一系列元素( [first, last) )。

  • 它通过删除元素的数量来减小容器大小,这些元素被销毁。

注意:迭代器 pos 必须有效且可取消引用。因此 end() 迭代器(有效,但不可取消引用)不能用作 pos 的值。

返回值和复杂度

返回值是一个迭代器,指向函数调用删除的最后一个元素之后的元素的新位置。这是擦除序列中最后一个元素的操作的容器端。

成员类型迭代器是指向元素的 random access iterator 类型。

在这里,时间复杂度与擦除(破坏)的元素数量加上最后一个元素被删除(移动)之后的元素数量成线性关系。

原文由 S M Samnoon Abrar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题