美文网首页
STL算法之谓词

STL算法之谓词

作者: 二进制人类 | 来源:发表于2022-10-16 19:47 被阅读0次

    概述

    返回值类型为bool的普通函数或函数对象都叫谓词。

    分类

    一元谓词:一个参数 一般用于查找策略

    二元谓词:两个参数 一般用于排序策略

    实现

    一元谓词

    #include <iostream>
    #include <string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    //函数对象作为谓词
    class GreaterThan40
    {
    public:
        bool operator()(int value){
            return value>40;
        }
    };
    //普通函数作为谓词
    bool greaterThan40(int value){
        return value>40;
    }
    int main()
    {
        vector<int> v;
        v.push_back(30);
        v.push_back(40);
        v.push_back(20);
        v.push_back(50);
        v.push_back(10);
        vector<int>::iterator ret;
        ret = find_if(v.begin(),v.end(),GreaterThan40());
        if(ret!=v.end()){
            cout<<"第一个大于40的数:"<<*ret<<endl;//50
        }
        return 0;
    }
    
    

    二元谓词

    #include <iostream>
    #include <string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    //普通函数作为谓词
    bool myGreater(int v1, int v2)
    {
        return v1>v2;
    }
    //函数对象作为谓词
    class MyGreater
    {
    public:
        bool operator()(int v1, int v2)
        {
            return v1>v2;
        }
    };
    int main()
    {
        vector<int> v;
            v.push_back(30);
            v.push_back(40);
            v.push_back(20);
            v.push_back(50);
            v.push_back(10);
            //sort(v.begin(), v.end(), myGreater);
            sort(v.begin(), v.end(), MyGreater());
            vector<int>::iterator it=v.begin();
            for(;it!=v.end();it++)
            {
                cout<<*it<<" ";
            }
            cout<<endl;
        return 0;
    }
    
    

    内建函数对象

    //6 个算数类函数对象,除了 negate 是一元运算,其他都是二元运算。
    template<class T> T plus<T>//加法仿函数
    template<class T> T minus<T>//减法仿函数
    template<class T> T multiplies<T>//乘法仿函数
    template<class T> T divides<T>//除法仿函数
    template<class T> T modulus<T>//取模仿函数
    template<class T> T negate<T>//取反仿函数
    
    //6 个关系运算类函数对象,每一种都是二元运算。
    template<class T> bool equal_to<T>//等于
    template<class T> bool not_equal_to<T>//不等于
    template<class T> bool greater<T>//大于
    template<class T> bool greater_equal<T>//大于等于
    template<class T> bool less<T>//小于
    template<class T> bool less_equal<T>//小于等于
    
    //逻辑运算类运算函数,not 为一元运算,其余为二元运算。
    template<class T> bool logical_and<T>//逻辑与
    template<class T> bool logical_or<T>//逻辑或
    template<class T> bool logical_not<T>//逻辑非
    

    实例

    void test(){
        vector<int> v;
        v.push_back(30);
        v.push_back(40);
        v.push_back(20);
        v.push_back(50);
        v.push_back(10);
        vector<int>::iterator ret;
        ret = find_if(v.begin(),v.end(),bind2nd(greater<int>(),40));
        if(ret!=v.end()){
            cout<<"第一个大于40的数:"<<*ret<<endl;
        }
    }
    

    相关文章

      网友评论

          本文标题:STL算法之谓词

          本文链接:https://www.haomeiwen.com/subject/gkyzartx.html