函數對象

今天思來想去,去了健身房鍛鍊了半個小時,而後吃了一碗米線。後來,想一想今天是否是應該看看書呢,因而乎,來到公司看了看函數對象這塊知識。算法

概念:數組

  所謂函數對象實際上是一個行爲相似函數的對象,它能夠不須要參數,也能夠帶有若干參數,其功能就是獲取一個值,或者改變操做的狀態。在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

 


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

今天就說這麼多,後續會繼續研究這塊滴~

相關文章
相關標籤/搜索