码迷,mamicode.com
首页 > 其他好文 > 详细

remove_if erase

时间:2018-12-15 23:19:00      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:sdn   结果   containe   war   ica   nbsp   container   tar   pos   

https://blog.csdn.net/u010913001/article/details/53348580

 

#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<>.

 

remove_if erase

标签:sdn   结果   containe   war   ica   nbsp   container   tar   pos   

原文地址:https://www.cnblogs.com/wllwqdeai/p/10125280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!