remove_if筛选数组元素-C++-第七城市 remove_if筛选数组元素 2011-08-02 09:08:31cnblogs.com-iliveido-点击数:3 更多 0
1.remove_if函数(算法)的原型:
template < class ForwardIterator, class Predicate > ForwardIterator remove_if ( ForwardIterator first, ForwardIterator last, Predicate pred );
其中ForwardIterator是前向迭代器类型,例如vector<int>::iterator,vector<float>::iterator。Predicate是一个二元函数。
二元函数是继承了binary_function类,并实现了operator()(T1,T2)重载的类。
2.remove_if函数的内部实现:remove_if并不会真正删除不符合条件的元素,而是“覆盖”。具体见 http://www.cplusplus.com/reference/algorithm/remove_if/ 。
3.例子:
我们挑选数组中满足条件(<4)的元素,要先循环一次,确定结果数组的大小:
int a[] = {0,9,8,3,4,6,5,7,2,1}; int nCount=0; for(int i =0;i<sizeof(a)/sizeof(int);++i) { if(a[i]<4)++nCount;}
然后创建结果数组,再做一次同样的循环:
int *b = new int[nCount]; for(int i=0;i<nCount;++i) {if(a[i]<4)b[i]=a[i];}
该做法浪费了一次循环。
如果使用STL的容器vector和算法remove_if来筛选,有两点优势:1.节省了循环;2.代码简洁。实现如下:
int a[] = {0,9,8,3,4,6,5,7,2,1}; vector<int> va; va.assign(a,a+sizeof(a)/sizeof(int)); vector<int>::iterator vi = remove_if(va.begin(),va.end(),bind2nd(greater_equal<int>(),4)); cout<<"删除>=4的元素后,得到的结果:"; copy(va.begin(),vi,ostream_iterator<int>(cout,", "));
|
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步