C++学习记录-内建函数对象

概念:

  • STL内建了一些函数对象

分类:

  • 算术仿函数
  • 关系仿函数
  • 逻辑仿函数

用法:

  • 这些仿函数所产生的对象,用法和一般函数完全相同

  • 使用内建函数对象,需要引入头文件

    1
    #include<functional>

算数仿函数

  • 功能描述:

​ 实现四则运算
​ 其中negate是一元运算,其余的都是二元运算

  • 函数:

    返回类型即<>中定义的类型
    T plus<T>     //加法仿函数
    T minus<T>     //减法仿函数
    T multiplies<T>     //乘法仿函数
    T divides<T>     //除法仿函数
    T modulus<T>     //取模仿函数
    T negate<T>     //取相反数仿函数

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<functional>//记得引入头文件
    using namespace std;

    void test1()
    {
    negate<int> n;
    cout << n(50) << endl;//输出-50

    plus<int> p;
    cout << p(10,20) << endl;

    }
    int main()
    {
    test1();
    return 0;
    }

逻辑仿函数

  • 函数:

    • bool logical_and<T>     //逻辑与
    • bool logical_or<T>     //逻辑或
    • bool logical_not<T>     //逻辑非
  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    //取非运算
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;

    void test1()
    {
    vector<bool> v;
    v.push_back(false);
    v.push_back(true);
    v.push_back(false);
    v.push_back(false);
    v.push_back(true);

    for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
    {
    cout << *it << " ";
    }
    cout << endl;

    vector<bool> va;
    va.resize(v.size());//记得给空的vector空间,否则下面的transform会报错

    transform(v.begin(),v.end(),va.begin(),logical_not<bool>());
    //搬运算法,将一个vector的元素搬运到另一个vector中

    for (vector<bool>::iterator it = va.begin(); it != va.end(); it++)
    {
    cout << *it << " ";
    }

    /*-----------------------------------------------*/


    logical_not<bool> ln;
    cout << ln(false) << endl;
    }
    int main()
    {
    test1();
    return 0;
    }

关系仿函数

  • 关系仿函数

    返回的是bool类型

  • 函数

    bool equal_to<T>     //等于
    bool not_equal_to<T>     //不等于
    bool greater<T>     //大于
    bool greater_equal<T>     //大于等于
    bool less<T>     //小于
    bool less_equal<T>     //小于等于

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    //使vector降序排列
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;

    void test1()
    {
    vector<int> v;
    v.push_back(30);
    v.push_back(60);
    v.push_back(20);
    v.push_back(40);
    v.push_back(10);

    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(), greater<int>());//降序排序

    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
    cout << *it << " ";
    }


    }
    int main()
    {
    test1();
    return 0;
    }