根据条件筛选数组元素,筛选数组中指定元素
Remove_if过滤器数组元素-C-第七个城市
Remove_if过滤器数组元素
2011-08-02 09: 08: 31
0更多
1.1.remove_if函数的原型(算法):
模板类前向迭代器,类谓词
forward iterator remove _ if(forward iterator first,ForwardIterator last,pred谓词);
ForwardIterator是一种前向迭代器类型,比如vector int: iterator,vector float: iterator。谓词是一个二元函数。
二元函数是继承了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);我)
{ if(a[I]4)n count;}
然后创建结果数组,再次执行相同的循环:
int * b=new int[nCount];
for(int I=0;我不算;我)
{ if(a[I]4)b[I]=a[I];}
这种做法浪费了一个周期。
如果用STL的容器向量和remove_if算法进行筛选,有两个好处:1。循环被保存;2.代码简洁。实现如下:
int a[]={0,9,8,3,4,6,5,7,2,1 };
向量整数
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,,);