仿函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿函数相关的知识,希望对你有一定的参考价值。
1、仿函数
本质:是一个对象,用起来像函数;
原因:在类内对()进行了重载;
2、绑定器和取反器
(1)、绑定器:把二元函数对象中一个参数固定,使之转为一元函数,C++标准库中提供了2种预定义的binder适配器,bind1st、bind2nd,分别绑定了第一个/第二个参数;
(2)、取反器:翻转的适配器;
(3)、一元函数:只针对一个参数,只有一个返回值;
二元函数:针对2个参数,只有一个返回值;
(4)、绑定器针对的是参数,绑定后其值就不变了,取反器对其进行取反;
(5)、可以通过调试工具-g;对源码进行剖析;
3、代码实现
关于绑定器和取反器的代码:
#include<iostream> #include<list> #include<algorithm> using namespace std; int main(void){ int ar[] = {1,3,5,7,9,8,6,4,2,0}; int n = sizeof(ar) / sizeof(int); int nCount = count(ar,ar+n, 4);//求数组中一共有多少个4 cout<<nCount<<endl; //x <= 4;的个数 nCount = count_if(ar, ar+sizeof(ar)/sizeof(int), bind2nd(greater<int>(), 4));//用的是第二个绑定器进行的绑定;; //4 < x //nCount = count_if(ar, ar+sizeof(ar)/sizeof(int), bind1st(less<int>(), 4));//用的是第一个绑定器进行的绑定; cout<<nCount<<endl; //对x < 4;进行取反,也就是x >= 4的个数; nCount = count_if(ar, ar+n, not1(bind2nd(less<int>(), 4)));//用的是取反器进行取反; cout<<nCount<<endl; return 0; }
运行结果
本文出自 “11586096” 博客,请务必保留此出处http://11596096.blog.51cto.com/11586096/1858951
以上是关于仿函数的主要内容,如果未能解决你的问题,请参考以下文章