zoukankan      html  css  js  c++  java
  • 函数对象

    数组
    enum eRelation                                  // 表示计算策略的枚举体
    {
        eLess,                                      // 小于
        eEqual,                                     // 等于
        eGreater                                    // 大于
    };
    template< typename T, typename ITER_TYPE>
    ITER_TYPE find_if_number( ITER_TYPE begin, ITER_TYPE end,
                      eRelation relType, const T &target )
                                                    // 用数值表示策略的find_if函数
    {
        for(ITER_TYPE iter = begin; iter!=end; iter++) // 遍历迭代器区间
        {
            switch( relType )                           // 根据不同的策略
            {
            case eLess:
                if( *iter < target )                    // 比较当前元素与目标
                {
                    return iter;                        // 返回迭代器
                }
            case eEqual:
              if( *iter == target )
                {
                    return iter;
                }
            case eGreater:
              if( *iter > target )
                {
                    return iter;
                }
            }
        }
        return end;                                     // 失败,则返回区间尾部
    }
    int main(int argc, char *argv[])                    // 主函数
    {
        int ary[5] = {1,2,3,4,5};                       // 数组
        vector vec(ary, ary+5);                    // 构造向量
        vector::iterator iter;                     // 定义迭代器
        iter = find_if_number( vec.begin(), vec.end(), eEqual, 3);  // 应用数值策略查找
        cout<< *iter <<endl;                            // 输出查找结果3
        return EXIT_SUCCESS;
     
     
    指针
     
     
    bool Equal(const int &ele, const int &target)       // 策略实现函数
    {
        return ele == target;
    }
    template< typename T, typename ITER_TYPE >          // 模板参数
    ITER_TYPE find_if_fun_ptr( ITER_TYPE begin, ITER_TYPE end,// 迭代器区间参数
            bool (*PFUN)(const T &, const T &),         // 表示算法策略的函数指针
            const T& target )                           // 查找目标
    {
        for(ITER_TYPE iter = begin; iter!=end; iter++) // 遍历迭代器区间
        {
          if(PFUN(*iter, target))                       // 应用算法策略(函数)
          {
                return iter;                            // 返回迭代器
            }
        }
        return end;                                     // 失败,则返回区间尾部
    }
    int main(int argc, char *argv[])// 主函数
    {
        int ary[5] = {1,2,3,4,5};                       // 定义数组
        vector vec(ary, ary+5);                    // 定义向量
        vector::iterator iter;                     // 定义迭代器
        iter = find_if_fun_ptr(vec.begin(), vec.end(), Equal, 3);
                                                        // 使用函数指针表达算法策略
        cout<< *iter <<endl;                            // 输出结果3
        system("PAUSE");
        return EXIT_SUCCESS;
    }
     
     函数对象
    template
    struct equal2 // 函数对象
    {
        bool operator()(const int &ele, const int &target)// 重载函数调用运算符
        {
            return ele == target;
        }
    };
    template< typename T, typename ITER_TYPE, typename Comp >
    ITER_TYPE find_if_fun_obj( ITER_TYPE begin, ITER_TYPE end,// 迭代器区间
            Comp funObj,                                   // 函数对象参数
            const T& target )                              // 目标
    {
        for(ITER_TYPE iter = begin; iter!=end; iter++)     // 遍历迭代器区间
        {
        if(funObj(*iter, target))                          // 应用算法策略
        {
              return iter;
            }
        }
        return end;
    }
    int main(int argc, char *argv[])                       // 主函数
    {
        int ary[5] = {1,2,3,4,5};                          // 定义数组
        vector vec(ary, ary+5);                       // 定义向量
        vector::iterator iter;                        // 定义迭代器
        iter = find_if_fun_obj(vec.begin(), vec.end(), equal2(), 3);
                                                           // 使用函数对象,查找目标
        cout<< *iter <<endl;                               // 输出结果3
        system("PAUSE");
        return EXIT_SUCCESS;
    }
     
  • 相关阅读:
    bootstrap 菜鸟笔记
    OOCSS待解疑惑
    sass 菜鸟笔记
    WOW.js – 让页面滚动更有趣 初学者使用教程
    JAVA8 十大新特性详解
    数据库事务的四大特性以及事务的隔离级别
    java基础--泛型
    java基础之 泛型
    springboot的文件路径,配置文件
    maven使用心得
  • 原文地址:https://www.cnblogs.com/tangjunjun/p/11676469.html
Copyright © 2011-2022 走看看