从容器或其他容器中删除具有特定属性的元素的任务std::vector
适用于函数式实现:为什么要为循环、内存释放和正确移动数据而烦恼?
然而,在 C++ 中执行此操作的标准方法似乎是以下成语:
std::vector<int> ints;
...
ints.erase(
std::remove_if(ints.begin(),
ints.end(),
[](int x){return x < 0;}),
ints.end());
此示例从整数向量中删除所有小于零的元素。
我发现它不仅丑陋,而且容易使用不正确。很明显,它std::remove_if
不能改变向量的大小(正如它的名字所暗示的那样),因为它只会传递迭代器。但是许多开发人员,包括我自己,一开始并没有明白这一点。
那么有没有一种更安全、更有希望更优雅的方式来实现这一目标呢?如果不是,为什么?