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