今天思来想去,去了健身房锻炼了半个小时,而后吃了一碗米线。后来,想一想今天是否是应该看看书呢,因而乎,来到公司看了看函数对象这块知识。算法
概念:数组
所谓函数对象实际上是一个行为相似函数的对象,它能够不须要参数,也能够带有若干参数,其功能就是获取一个值,或者改变操做的状态。在C++程序设计中,任何普通的函数和任何重载了调用运算符operator()的类的对象都知足函数对象的特征,所以均可以做为函数对象传递给算法做为参数使用。ide
分类:函数
经常使用的函数对象能够分为产生器(generator),一元函数(unary function),二元函数(binary function),一元谓词(unary predicate),二元谓词(binary prediciate)spa
下面给出两个例子:设计
1.第一个例子用普通的函数做为函数对象指针
//定义一个普通函数code
int mult(int x, int y){return x*y;}; int array[] = {1, 2, 3, 4, 5}; const int N = sizeof(array)/sizeof(int); cout << "the result:"<<accumulate(array, array+N,1,mult)<<endl;
2.重载了函数调用符的类做为函数对象对象
class MultClass { public: int operator()(int x, int y)const{return x*y;}//重载操做符operator() }; int array[] = {1, 2, 3, 4, 5}; const int N = sizeof(array)/sizeof(int); cout << "MultClass accumulate result is"<<accumulate(array, array + N, 1, MultClass());
说一下函数适配器:blog
STL中定义了大量的函数对象,可是有时候须要函数返回值须要进一步简单计算,或者填上多余的参数,不能直接带入算法。函数适配器实现了这一功能,将一种函数对象转化为另外一种符合要求的函数对象。
函数适配器能够分为4大类:
1.绑定适配器
2.组合适配器
3.指针函数适配器
4.成员函数适配器
给一个关于绑定适配器的例子:
//STL函数适配器,在数组中查找第一个大于40的元素
/////////////////////////////////////////////////////////
int intArr[] = {30, 90, 10, 40, 70, 50, 20, 80}; const int NArr = sizeof(intArr)/sizeof(int); vector<int> arr(intArr, intArr + NArr); vector<int>::iterator p = find_if(arr.begin(), arr.end(), bind2nd(greater<int>(), 40)); if (p == arr.end()) { cout<<"no element greater than 40"<<endl; } else { cout<<"first element greater than 40 is:" << *p<<endl; }
//////////////////////////////////////////////////////////
今天就说这么多,后续会继续研究这块滴~