欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STL函数对象——谓词

程序员文章站 2022-07-12 14:37:26
...

STL函数对象——谓词

概念

谓词是指普通函数或重载的operator()返回值是bool类型的函数对象。如果operator接受一个参数,称为一元谓词,如果接受两个参数,称为二元谓词。谓词可作为一个判断式。

回调函数是指只有当某个函数(更确切的说是函数的指针)被作为参数, 被另一个函数调用时, 它才是回调函数。

示例:

//一元谓词
class GreaterThenFive
{
public:
    bool operator()(int num)
    {
        return num > 5;
    }
};

void test1()
{
    vector<int> v;
    for (int i=0;i<10;i++)
    {
        v.push_back(i);
    }

    vector<int>::iterator it = find_if(v.begin(),v.end(),GreaterThenFive());
    if (it == v.end())
    {
        cout << "不存在" << endl;
    }
    else
    {
        cout << *it << endl;
    }
}

//二元谓词
class MyCompare
{
public:
    bool operator()(int num1, int num2)
    {
        return num1>num2;
    }
};

void test2()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(40);
    v.push_back(30);
    v.push_back(50);
    v.push_back(90);

    //排序:默认从小到大
    sort(v.begin(),v.end());
    for (vector<int>::iterator it=v.begin();it!=v.end();it++)
    {
        cout << *it << "\t";
    }
    cout << endl << "*****************" << endl;
    //使用函数对象改变算法策略,排序从大到小
    sort(v.begin(),v.end(),MyCompare());
    for (vector<int>::iterator it=v.begin();it!=v.end();it++)
    {
        cout << *it << "\t";
    }
    cout << endl;
}
相关标签: STL stl c++