c++ remove_if

简介:
#include <algorithm>

函数remove_if()移除序列[start, end)中所有应用于谓词p返回true的元素.

此函数返回一个指向被修剪的序列的最后一个元素迭代器.

记住, remove_if()并不会实际移除序列[start, end)中的元素; 如果在一个容器上应用remove_if(), 容器的长度并不会改变(remove_if()不可能仅通过迭代器改变容器的属性), 所有的元素都还在容器里面. 实际做法是, remove_if()将所有应该移除的元素都移动到了容器尾部并返回一个分界的迭代器. 移除的所有元素仍然可以通过返回的迭代器访问到. 为了实际移除元素, 你必须对容器自行调用erase()以擦除需要移除的元素. 这也是erase-remove idiom名称的由来:

container.erase(remove_if(container.begin(), container.end(), pred), container.end());

remove_if()类似于partition(), 但有两点不同: 1) 它们使用的谓词条件刚好相反. 2) remove_if只强调前面部分(第二部分不再需要了)

remove_if()以线性时间(linear time)运行.

remove_if()不能用于关联容器如set<>或map<>.

 

以下代码的执行结果如下:

 

相关文章
|
算法 C++ 容器
C++ std::remove/std::remove_if/erase用法探讨
std::remove 不会改变输入vector/string的长度。其过程相当于去除指定的字符,剩余字符往前靠。后面的和原始字符保持一致。
179 0
List的remove操作一定要小心!
List的remove操作一定要小心!
|
存储 Java 程序员
foreach中不允许对元素进行add和remove底层原理
foreach中不允许对元素进行add和remove底层原理 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者微信公众号:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝
133 0
foreach中不允许对元素进行add和remove底层原理
ArrayList的remove()方法解读
remove()方法:要注意在remove()方法有两种形式: ①:remove(int index):按照集合下表查找,这个也是默认的,返回值是Object型。 ②:remove(Object o):按照value值进行移除操作涉及装箱,所以默认是第一种,其返回值是boolean型,表示操作是否成功。 remove(int index): @Test public void test1() { ArrayList arrayList...
219 0
|
物联网 Linux 开发者
Remove 函数|学习笔记
快速学习 Remove 函数
|
Java
Foreach循环中为什么不要进行remove/add操作
Foreach循环中为什么不要进行remove/add操作
123 0
list.remove(index)返回flase,移除失败
list.remove(index)返回flase,移除失败
123 0
list.remove(index)返回flase,移除失败
|
Java C++
LeetCode之Remove Element
LeetCode之Remove Element
115 0
List.remove 报错 UnsupportedOperationException
Java中List.remove(removeRange,clear类似) 报出 UnsupportedOperationException 的错误。原来该List是一个AbstractList,不支持增删改操作。
1252 0
|
算法 C#
算法题丨Remove Element
描述 Given an array and a value, remove all instances of that value in-place and return the new length.
1048 0