functional:函数对象库

发布时间 2023-04-22 16:22:02作者: linux星

functional的基本概念和定义 functional是C++标准模板库(STL)中的一个重要组件,它提供了一系列函数对象(function object),用于在算法中进行函数调用。函数对象可以像普通函数一样调用,但与普通函数不同的是,函数对象可以存储状态,因此可以在多次调用之间保存状态。functional中常见的函数对象包括:一元函数对象、二元函数对象、关系函数对象等。 C++中常见的函数对象包括:negate、plus、minus、multiplies、divides、modulus、logical_not、logical_and、logical_or、less、less_equal、greater、greater_equal、equal_to、not_equal_to等。

以下是这些函数对象的定义。

#include <functional>
using namespace std;
// 一元函数对象
negate<T> func; // 对输入的T类型数据取相反数
// 二元函数对象
plus<T> func; // 对两个输入的T类型数据求和
minus<T> func; // 对两个输入的T类型数据进行减法运算
multiplies<T> func; // 对两个输入的T类型数据进行乘法运算
divides<T> func; // 对两个输入的T类型数据进行除法运算
modulus<T> func; // 对两个输入的T类型数据进行取模运算
// 关系函数对象
less<T> func; // 对两个输入的T类型数据进行小于比较
less_equal<T> func; // 对两个输入的T类型数据进行小于等于比较
greater<T> func; // 对两个输入的T类型数据进行大于比较
greater_equal<T> func; // 对两个输入的T类型数据进行大于等于比较
equal_to<T> func; // 对两个输入的T类型数据进行相等比较
not_equal_to<T> func; // 对两个输入的T类型数据进行不等比较

#include <functional>
using namespace std;
// 使用一元函数对象
negate<int> func;
int n = 123;
int result = func(n); // 对n取相反数
// 使用二元函数对象
plus<int> func;
int n1 = 123, n2 = 456;
int result = func(n1, n2); // 对n1和n2求和
// 使用关系函数对象
less<int> func;
int n1 = 123, n2 = 456;
bool result = func(n1, n2); // 判断n1是否小于n2

#include <functional>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 使用自定义函数对象进行排序
struct MyLess {
    bool operator()(int a, int b) const {
        return a < b;
    }
};
sort(v.begin(), v.end(), MyLess()); // 使用自定义函数对象进行排序
// 使用lambda表达式定义函数对象
sort(v.begin(), v.end(), [](int a, int b) {
    return a < b;
}); // 使用lambda表达式定义函数对象进行排序

  1.