在C++中按值删除元素 - 首选的习语是否真的由双重否定组成?

daj*_*daj 1 c++ stl idioms erase

我遇到了在C++中按值删除元素的问题的答案:

C++按值而不是按位置擦除向量元素?

基本上:

vec.erase(std::remove(vec.begin(), vec.end(), valueToRemove), vec.end());
Run Code Online (Sandbox Code Playgroud)

答案是有道理的,但这不是坏风格吗?逻辑由双重否定组成......有更清洁的方法吗?

Ben*_*igt 6

从集合中删除元素包含两个步骤:

  • 向下移动所有后续元素以填充匹配创建的孔
  • 标记新的结局

与C++标准库,这是两个独立的功能,removeerase分别.

人们当然可以想象一种erase_if更容易使用的功能,但显然当前的代码被认为是足够好的.当然你可以自己写remove_if.