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

    概念:

    返回bool类型的仿函数被称为谓词;

    如果operator()接受一个参数,那么就叫一元谓词;

    如果operator()接受两个参数,那么就叫二元谓词;

    一、一元谓词

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    //仿函数 返回值类型是bool数据类型,称为谓词
    //一元谓词
    
    class GreaterFive
    {
    public:
        bool operator()(int val)
        {
            return val > 5;
        }
    };
    
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
    
        //查找容器中 有没有大于5的数字
        //GreaterFive() 匿名函数对象
        vector<int>::iterator it =  find_if(v.begin(), v.end(), GreaterFive());
        if (it == v.end())
        {
            cout << "未找到" << endl;
        }
        else
        {
            cout << "找到了大于5的数字为: " << *it << endl;
        }
    
    }
    
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    二、二元谓词

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    //二元谓词
    class MyCompare
    {
    public:
        bool operator()(int va11,int val2)
        {
            return va11 > val2;
        }
    
    };
    
    void test01()
    {
        vector<int>v;
        v.push_back(10);
        v.push_back(40);
        v.push_back(20);
        v.push_back(30);
        v.push_back(50);
    
        sort(v.begin(), v.end());
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    
        //使用函数对象  改变算法策略,变为排序规则为从大到小 
        sort(v.begin(), v.end(), MyCompare());
    
        cout << "-----------------------" << endl;
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }
  • 相关阅读:
    使用Maven Helper解决Maven依赖冲突
    bzoj 1037[ZJOI2008]生日聚会Party
    bzoj 1031[JSOI2007]字符加密
    bzoj 1029 [JSOI2007]建筑抢修
    bzoj 1025[SCOI2009]游戏
    bzoj 1027[JSOI2007]合金
    bzoj 1024[SCOI2009]生日快乐
    bzoj 1023[SHOI2008]cactus仙人掌图
    bzoj 1022 [SHOI2008]小约翰的游戏John
    bzoj 1021[SHOI2008]Debt 循环的债务
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12112398.html
Copyright © 2011-2022 走看看