remove_if详解,配合erase
来源:互联网 发布:开淘宝店必备软件 编辑:程序博客网 时间:2024/05/16 07:24
#include <algorithm>forward_iterator remove_if( forward_iterator start, forward_iterator end, Predicate p );
函数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());
vector<int> vt;int arr[9] = {1,2,3,4,5,6,7,8,9};vt.assign(arr,arr+9);vector<int>::iterator pos;pos = remove_if(vt.begin(),vt.end()),compose2(logical_and<bool>(),bind2nd(greater<int>(),4),bind2nd(less<int>(),7))); //删除比4大且比7小的数vt.erase(pos,vt.end()); //全部移动到末尾了//结果1,2,3,4,7,8,9
remove_if()类似于partition(), 但有两点不同: 1) 它们使用的谓词条件刚好相反. 2) remove_if只强调前面部分(第二部分不再需要了)
remove_if()以线性时间(linear time)运行.
remove_if()不能用于关联容器如set<>或map<>.
0 0
- remove_if详解,配合erase
- remove/remove_if算法配合容器的erase方法实现容器删除元素功能
- 为什么vector的remove_if实际上并没有删除元素,而要配合erase使用
- remove_if
- remove_if
- remove_if
- remove_if
- 详解std::map::erase
- string c++ 详解 erase find
- UIScrollerview详解,配合UIPageControl
- erase
- erase
- erase()
- erase
- erase
- erase
- 关于remove_if
- remove_if用法
- 剑指Offer之斐波那契数列问题
- k8s之多节点,多pod,duoservice之间通信实验
- Scala基础语法学习笔记
- leetcode(55).217. Contains Duplicate
- Ubuntu中普通用户与root用户切换命令
- remove_if详解,配合erase
- 在线考试系统(2)
- 摇一摇 menglong0329
- Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针
- 5.Spring学习笔记_自动装配(by尚硅谷_佟刚)
- 徒子徒孙
- 关于Linux系统上面安装显卡驱动的方法,(1070,1060,1050,亲测可用)
- 欢迎使用CSDN-markdown编辑器
- POJ 3723 Conscription 最大生成树 + 并查集