场景
-
在开发程序的时候,经常需要移除在集合里符合条件的对象,
C++
有没有快捷的方法? -
字符串里有空格,有没有库能快速删除的?
说明
-
以上的问题可以用
C++
的标准库std::remove
来解决。 这个模板函数很特别,因为单独使用这个函数得到的结果没有意义,必须和标准函数std::erase
来组合使用,在标准库里是比较另类的存在了,但也是常用的函数。 -
std::remove
和它的自定义比较函数版本std::remove_if
的作用是:通过std::move
范围内的元素来完成的,在这种方式下,不被移除的元素出现在范围的开始。保留剩余元素的相对顺序,容器的物理大小不变。迭代器指向新的逻辑末端和物理末端之间的元素仍然是可解引用的,但元素本身具有未指定的值。简单来说std::remove
把不符合条件的元素往前面移动(std::move
),覆盖符合条件的元素。正因为调用这个函数之后集合大小没变化,返回的枚举包含的元素值还是无效的,所以还需要