如何从具有特定值的 stl 向量中删除项目?

新手上路,请多包涵

我正在查看 stl 矢量的 API 文档,并注意到矢量类上没有允许删除具有特定值的元素的方法。这似乎是一种常见的操作,而且没有内置的方法来做到这一点似乎很奇怪。

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

阅读 483
2 个回答

std::remove 实际上并没有从容器中擦除元素:它将要删除的元素移动到容器的末尾,并返回新的结束迭代器,可以传递给 container_type::erase 来做实际删除现在位于容器末尾的额外元素:

 std::vector<int> vec;
// .. put in some values ..
int int_to_remove = n;
vec.erase(std::remove(vec.begin(), vec.end(), int_to_remove), vec.end());

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

擦除删除习语 类似,对于 vector 可以使用 resizeremove 并使用迭代器距离计算:

 std::vector<int> vec;
// .. put in some values ..
int int_to_remove = n;
vec.resize(std::remove(vec.begin(), vec.end(), int_to_remove) - vec.begin());

在这里 测试。

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

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