STL - 函数对象
函数对象
函数对象概念
概念:
- 重载函数调用操作符的类,其对象常称为函数对象。
- 函数对象使用重载的()时,行为类似函数调用,也叫仿函数。
本质:
函数对象(仿函数)是一个类,不是一个函数。
函数对象使用
特点:
- 函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。
- 函数对象超出普通函数的概念,函数对象可以有自己的状态。
- 函数对象可以作为参数传递。
谓词
谓词概念
概念:
- 返回bool类型的仿函数称为谓词。
- 如果
operator()接受一个参数,那么叫做一元谓词。 - 如果
operator()接受两个参数,那么叫做二元谓词。
内建函数对象
内建函数对象意义
概念:
- STL内建了一些函数对象。
分类:
- 算术仿函数
- 关系仿函数
- 逻辑仿函数
用法:
- 这些仿函数所产生的对象,用法和一般函数完全相同。
- 使用内建函数对象,需要引入头文件
#include <functional>。
算术仿函数
功能描述:
- 实现四则运算。
- 其中
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> | 取反仿函数 |
示例:
#include <iostream> #include <functional> // 必须包含头文件 void test01() { // negate 一元仿函数 取反 std::negate<int> n; std::cout << n(50) << std::endl; // 输出 -50 // plus 二元仿函数 加法 std::plus<int> p; std::cout << p(10, 20) << std::endl; // 输出 30 } int main() { test01(); return 0; }