根据条件筛选数组元素,筛选数组中指定元素

  根据条件筛选数组元素,筛选数组中指定元素

  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,,);

根据条件筛选数组元素,筛选数组中指定元素