【问题标题】:How to remove several elements from the end of std::vector?如何从 std::vector 末尾删除几个元素?
【发布时间】:2016-03-30 20:38:37
【问题描述】:

假设我有一个std::vector 整数:

std::vector<int> v;

v 包含 100 个元素,我想删除最后 10 个元素。我可以想到这个解决方案:

v.erase(v.end() - 10, v.end());

还有更好的吗?

【问题讨论】:

  • for (size_t i = 0; i &lt; rm_elements; ++i) v.pop_back();?不过,这似乎并不优于您的解决方案。
  • 您认为“更好”是什么?您的解决方案是单行且易于理解的。

标签: c++ c++11 vector stl


【解决方案1】:

你可以试试这个:

v.resize(v.size()-10);

但是,您需要根据您的方法对其进行基准测试。我不确定它是否更好,甚至可能完全相同。

您也可以在调整大小之前检查大小:

if(v.size()>=10){
    v.resize(v.size()-10);
}

编辑

Resize 移除向量末尾的元素: http://www.cplusplus.com/reference/vector/vector/resize/

如果 n 小于当前容器大小,则内容为 减少到它的前 n 个元素,删除那些超出的元素(并销毁 他们)。

【讨论】:

  • 确定std::vector::resize 总是删除最后的元素吗?标准能保证吗?
  • @cad 假设新尺寸小于原始尺寸,那么是的。
  • @cad 编辑参考