文章目录

  • 一、概念
  • 总结

一、概念

仿函数又称函数对象,即重载了函数调用运算符()的类的对象。
优势:
1.仿函数对象的内部可以有自己的状态,可以实现一些其他的功能。
2.函数对象可以作为参数进行传递。

当仿函数类内重载的返回值是bool类型被称为谓词,形参为1个为1元谓词,2个是2元谓词。

class Compare
{public:Compare(){n = 0;}//一元谓词bool operator()(int a){n++;return a > 5;    }//二元谓词bool operator()(int a, int b){n++;return a > b; }int n;
};bool Print(Compare& c, int a, int b)
{return c(a, b);
}int main()
{Compare c;//函数对象//调用重载()cout << c(1, 2) << endl;cout << c(3, 2) << endl;cout << c(2, 1) << endl;//可实现计数功能cout << c.n << endl;//作为参数传递cout << Print(c, 3, 6) << endl;system("pause");
}
0
1
1
3
0

STL里内置了一些仿函数类型,包括算术仿函数、关系仿函数、逻辑仿函数。

算数仿函数包括+,-,*,/, 取模,取反。

#include<iostream>
#include<string>
#include<functional>//STL内部函数对象头文件
using namespace std;int main()
{//算术仿函数//加法plus<int>a;cout << a(1, 2) << endl;//减法minus<int>a1;cout << a1(1, 2) << endl;//乘法multiplies<int>a2;cout << a2(1, 2) << endl;//除法divides<int>a3;cout << a3(2, 1) << endl;//取反仿函数negate<int>b;cout << b(1) << endl;//取模仿函数modulus<int>c;cout << c(3,2) << endl;system("pause");
}
3
-1
2
2
-1
1

关系仿函数包括>,<,=,<=,>=,!=。

#include<iostream>
#include<string>
#include<list>
#include<functional>//STL内部函数对象头文件
using namespace std;int main()
{list<int>L;//插入L.push_back(1);L.push_back(2);list<int>L1;L1 = L;//内置的关系仿函数,大于//L.sort(greater<int>());//小于//L.sort(less<int>());//小于等于L.sort(greater_equal<int>());for (list<int>::iterator i = L.begin(); i != L.end(); i++){cout << *i <<  endl;}system("pause");
}

逻辑运算符包括与或非。

 list<bool>L1;L1.push_back(true);L1.push_back(false);for (list<bool>::iterator i = L1.begin(); i != L1.end(); i++){cout << *i << endl;}list<bool>L2;L2.resize(L1.size());transform(L1.begin(), L1.end(), L2.begin(),logical_not<bool>());for (list<bool>::iterator i = L2.begin(); i != L2.end(); i++){cout << *i << endl;}

总结

对于简单的容器之间的运算可以使用内置的仿函数,如果想自定义更复杂的仿函数,就需要自己构建仿函数类。

C++STL总结笔记(二)——仿函数(函数对象)相关推荐

  1. 【C++】优先级队列priority_queue/仿函数(函数对象)

    这里写目录标题 一.优先级队列 1.优先级队列的介绍 2.priority_queue的定义与使用 二.仿函数/函数对象 三.优先级队列的模拟实现 一.优先级队列 1.优先级队列的介绍 1)注意优先级 ...

  2. STL源码剖析 第七章 仿函数(函数对象)

    函数对象:具有函数性质的对象 使得用户像使用函数一样使用它 一般函数提供两个版本,第一个版本使用operator < ;第二版本需要用户 指定某种操作 第二版本就是设计一个函数,将函数指针作为算 ...

  3. 从零开始学C++之STL(八):函数对象、 函数对象与容器、函数对象与算法

    http://blog.csdn.net/jnu_simba/article/details/9500219 一.函数对象 1.函数对象(function object)也称为仿函数(functor) ...

  4. 仿函数 ( 函数对象 ) 详解

    在C语言中我们是如何实现函数的传递呢? 没错就是函数指针! template<class T> void Say(T a) {cout << a << endl; ...

  5. Python学习笔记7:函数对象及函数对象作參数

    一.lambda函数 比如: fun1 = lambda x,y: x + y print fun1(3,4) 输出:7 lambda生成一个函数对象.该函数參数为x,y,返回值为x+y.函数对象赋给 ...

  6. STL学习笔记(仿函数)

    仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 例如我们定义一个 ...

  7. Mr.J-- jQuery学习笔记(二)--核心函数jQuery对象

    核心函数 函数列表 函数说明:jQuery()    主要用于获取HTML DOM元素并将其封装为jQuery对象 jQuery(): jQuery()函数是jQuery库的最核心函数,jQuery的 ...

  8. SGI STL 学习笔记二 vector

    sequence containers Array Vector Heap Priority_queue List sList(not in standard) Deque Stack Queue S ...

  9. Scala2.11.7学习笔记(二)函数定义

    鲁春利的工作笔记,好记性不让烂笔头 函数定义 def 函数名(参数列表) : 返回类型 = {函数体} 说明: 返回类型默认为空(Unit,类似于Java的void): 函数体中默认最后一行为该函数的 ...

  10. 《Go语言程序设计》读书笔记(二)函数

    <Go 语言程序设计>在线阅读地址:https://yar999.gitbooks.io/go... 函数 函数声明 函数声明包括函数名.形式参数列表.返回值列表(可省略)以及函数体. f ...

最新文章

  1. Android Studio 3.5 Canary 12 发布
  2. spring整合springmvc和mybatis
  3. 深度学习进入芯片领域,揭秘寒武纪神经网络处理器
  4. megacli通过盘符定位物理盘_柴少鹏的官方网站
  5. CentOS 8 成为绝版!到底发生了什么?
  6. Java并发优化思路
  7. python log日志级别_python – 日志记录:如何为处理程序设置最大日志级别
  8. columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 版本mysql8.0
  9. Golang的time包的应用
  10. 使用god来自动启动崩溃的进程
  11. Java多线程知识整理
  12. idea环境下lombok插件的安装和使用
  13. cacti中个别流量图超过80M不显示解决办法
  14. 2018暑假第二周总结(7.16-7.22)
  15. VS2010 Express中文版ISO下载地址
  16. 视频格式mp4转emf
  17. 如何卸载PLC200软件---SETP7
  18. S3-s3cmd命令行工具使用
  19. Linux安装配置Tomcat 8.5.34 快捷启动,关闭(二)
  20. 操作系统之——磁盘存储器管理

热门文章

  1. MEF 导入(Import)和导出(Export)
  2. [转]js判断url是否有效
  3. Starling 2D框架简介
  4. IE9不支持CSS line-height的文字垂直居中解决方法
  5. python接口测试框架实战与自动化进阶(三)
  6. ssm框架下文件上传
  7. SpringBoot注解大全(转)
  8. 002服务提供者Eureka
  9. angularjs学习曲线
  10. C#项目中常用到的设计模式