函数对象

今天思来想去,去了健身房锻炼了半个小时,而后吃了一碗米线。后来,想一想今天是否是应该看看书呢,因而乎,来到公司看了看函数对象这块知识。算法

概念:数组

  所谓函数对象实际上是一个行为相似函数的对象,它能够不须要参数,也能够带有若干参数,其功能就是获取一个值,或者改变操做的状态。在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());
View Code

 

说一下函数适配器: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;
}
View Code

 


//////////////////////////////////////////////////////////

今天就说这么多,后续会继续研究这块滴~

相关文章
相关标签/搜索