美文网首页
黑马C++视频笔记《STL之函数对象(仿函数)》

黑马C++视频笔记《STL之函数对象(仿函数)》

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-01-25 00:01 被阅读0次
/* 函数对象
 * 定义:重载函数调用操作符的类,其对象常称为函数对象.
 * 函数对象使用重载的`()`时,行为类似函数调用,也叫仿函数;
 *
 * 本质:函数对象(仿函数)是一个类,不是一个函数.
 *
 * 函数对象使用特点:
 *  - 函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值;
 *  - 函数对象超出普通函数的概念,函数对象可以有自己的状态.(仿函数也可以看做一个实例化的特殊类,利用其类变量来记录一些状态);
 *  - 函数对象可以作为参数传递.
 *
 * 谓词:返回bool类型的仿函数称为谓词.
 *  - 如果operator()接受一个参数,那么叫做一元谓词;
 *  - 如果operator()接受两个参数,那么叫做二元谓词;
 *
 * 内建函数对象:
 *  (1)算术仿函数,实现四则运算。其中negate是一元运算,其他都是二元运算。仿函数原型:
 *      - `template<class T> T plus<T>`     加法仿函数,`plus<int> p; p(10,20); // p(10, 20)==30`
 *      - `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>`   取反仿函数,`negate<int> neg; neg(10); // neg(10)==-10`
 *  (2)关系仿函数,实现关系对比。仿函数原型:
 *      - `template<class T> bool equal_to<T>`      等于;
 *      - `template<class T> bool not_equal_to<T>`  不等于;
 *      - `template<class T> bool greater<T>`       大于,`sort(v.begin(), v.end(), greater<int>())`;
 *      - `template<class T> bool greater_equal<T>` 大于等于;
 *      - `template<class T> bool less<T>`          小于;
 *      - `template<class T> bool less_equal<T>`    小于等于;
 *  (3)逻辑仿函数,实现逻辑运算。仿函数原型:
 *      - `template<class T> bool logical_and<T>`   逻辑与;
 *      - `template<class T> bool logical_or<T>`    逻辑或;
 *      - `template<class T> bool logical_not<T>`   逻辑非;
 *
 * 用法:
 *  - 这些仿函数所产生的对象,用法和一般函数完全相同;
 *  - 使用内建函数对象,需要引入头文件`include <functional>`;
 */

相关文章

网友评论

      本文标题:黑马C++视频笔记《STL之函数对象(仿函数)》

      本文链接:https://www.haomeiwen.com/subject/sismzktx.html