首页IT科技数组筛选法求素数(remove_if筛选数组元素)

数组筛选法求素数(remove_if筛选数组元素)

时间2025-07-31 03:24:18分类IT科技浏览4316
导读:remove_if筛选数组元素...

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

{ 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;

va.assign(a,a+sizeof(a)/sizeof(int));

vector::iterator vi = remove_if(va.begin(),va.end(),bind2nd(greater_equal(),4));

cout<<"删除>=4的元素后             ,得到的结果:";

copy(va.begin(),vi,ostream_iterator<int>(cout,", "));

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
任务悬赏app源码转让出售是真的吗(做任务的平台有哪些-做悬赏任务和平台的商业逻辑和方式,新手和老人都可以看看) 如何控制网站建设费用成本?(精细管理与预算控制是关键)