今天思來想去,去了健身房鍛鍊了半個小時,而後吃了一碗米線。後來,想一想今天是否是應該看看書呢,因而乎,來到公司看了看函數對象這塊知識。算法
概念:數組
所謂函數對象實際上是一個行爲相似函數的對象,它能夠不須要參數,也能夠帶有若干參數,其功能就是獲取一個值,或者改變操做的狀態。在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; }
//////////////////////////////////////////////////////////
今天就說這麼多,後續會繼續研究這塊滴~