zoukankan      html  css  js  c++  java
  • remove_if筛选数组元素

    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,", "));
  • 相关阅读:
    Linux系统介绍(二)文件系统结构
    为Docker Swarm添加调度策略
    Docker 三剑客之 Docker Swarm
    Hadoop中文文档
    hadoop 学习笔记:mapreduce框架详解
    Java进阶-- GUI
    ceph(8)--关于Ceph PGs
    今天在学习NTP时发现了2个网站
    开始学红帽的RHCE课堂有2次课了,要记下自己的学习经历
    Switch能否用string做参数
  • 原文地址:https://www.cnblogs.com/lexus/p/2743885.html
Copyright © 2011-2022 走看看