数组筛选法求素数(remove_if筛选数组元素)
remove_if筛选数组元素
2011-08-02 09:08:31cnblogs.com-iliveido-点击数:3
更多 01.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
{ if(a[i]<4)++nCount;}然后创建结果数组 ,再做一次同样的循环:
int *b = new int[nCount];
for(int i=0;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
va.assign(a,a+sizeof(a)/sizeof(int));
vector
cout<<"删除>=4的元素后 ,得到的结果:";
copy(va.begin(),vi,ostream_iterator<int>(cout,", "));创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!