CC++STL-函数对象
# C/C++:STL-函数对象
# 概念
- 重载函数调用操作符的类,其对象称为函数对象;
- 函数对象使用重载的
()
时行为类似函数调用,因而也叫仿函数; - 其本质是类而非函数。
# 函数对象的使用
因为其本质是类,因此拥有以下特点:
- 可以像普通函数一样调用,可以有参数和返回值
- 可以有自己的状态,比普通函数更丰富
- 可以作为参数传递
class MyAdd
{
public:
MyAdd():num(0){}
public:
int operator()(int a, int b)
{
num++;
return a + b;
}
int num;
};
调用:
MyAdd myadd;
cout << myadd(10, 20) << '\n';
cout << myadd(10, 20) << '\n';
cout << "调用次数:" << myadd.num << '\n';
# 谓词
# 概念
返回bool
类型的仿函数称为谓词;接受一个参数是一元谓词,接受两个是二元谓词。
# 一元谓词
class GreaterFive
{
public:
bool operator()(int v1)
{
return v1 > 5;
}
};
# 二元谓词
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
};
# 内建函数对象
包含#include <functional>
分类:
算术仿函数
plus<T> minus<T> multiplies<T> divides<T> modulus<T> negate<T>
关系仿函数
equal_to<T> not_equal_to<T> greater<T> greater_equal<T> less<T> less_equal<T>
应用示例:
std::sort(v.begin(), v.end(), std::greater<int>());
逻辑仿函数
logical_and<T> logical_or<T> logical_not<T>
编辑 (opens new window)
上次更新: 2023/08/15, 01:36:48