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

标签 c++ stl erase idioms

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

C++ Erase vector element by value rather than by position?

基本上:

vec.erase(std::remove(vec.begin(), vec.end(), valueToRemove), vec.end());

这个答案有道理,但是这样不是很糟糕吗?逻辑由双重否定组成......有没有更干净的方法来做到这一点?

最佳答案

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

  • 向下移动所有后续元素以填充匹配产生的空洞
  • 标记新的结束

对于 C++ 标准库,它们是两个独立的函数,分别是 removeerase

当然可以想象 erase_if 类型的函数会更容易使用,但显然当前代码被认为已经足够好了。当然,您可以编写自己的 remove_if

关于c++ - 在 C++ 中按值删除元素 - 首选成语真的由双重否定组成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310421/

相关文章:

c++ - 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留...),但实际上保持 B 之前的 As 连续

c++ - 在 vector 上调用 clear() 并不会真正删除 data() 中的数据?

c++ - 有人可以解释为什么这个 vector 删除操作不能正常工作吗?

c++ - Ruby block ,C++ 中的 java 闭包

c++ - 为什么C++中没有定义n的sizeof(array A[n])是固定的?

c++ - 无锁的原子函数改变两个独立的内存位置

c++ - 在条件运算符中使用对象两次会产生 UB 吗?

c++ - 如何将 std::string 与采用 char[] 缓冲区的 Win32 函数混合?

C++ 从指针 vector 中删除元素

c++ - 检查一个复数是否有 NaN