目錄ios
爲了使類屬算法具備靈活性,STL常使用函數的重載機制爲算法提供兩種形式。算法的第一種形式使用的是常規的操做來實現。第二種形式中,算法能夠根據用戶指定的準測對元素經行處理。算法
函數對象包含了一個能夠經過函數調用運算符()使用的函數。實際上,函數對象是重載了函數調用運算符operator()的類模板。less
用戶能夠建立本身的函數對象。STL提供了算術函數對象,關係函數對象,邏輯函數對象。ide
算術函數對象:函數
示例代碼:spa
#include <iostream> #include <algorithm> #include <string> #include <numeric> #include <iterator> #include <vector> #include <functional> using namespace std; int functAdd(plus<int>,int,int); int main() { // 加法函數對象 plus<int> addNum; int sum = addNum(34,56); cout << "Sum=" << sum << endl; // 字符串拼接 plus<string> joinString; string s1 = "hello"; string s2 = "There"; string str = joinString(s1,s2); cout << "str=" << str << endl; // 調用外部函數 cout << "funcAdd=" << functAdd(addNum,34,26) << endl; int list[8] = {1,2,3,4,5,6,7,8}; vector<int> intsList(list,list+8); ostream_iterator<int> screenOut(cout, " "); cout << "intList:"; copy(intsList.begin(),intsList.end(),screenOut); cout << endl; //累計 int suma = accumulate(intsList.begin(),intsList.end(),0); cout << "accumulate:" << suma << endl; int product = accumulate(intsList.begin(),intsList.end(),1,multiplies<int>()); cout << "product:" << product << endl; return 0; } int functAdd(plus<int> sum,int x,int y) { return sum(x, y); }
intQueue.front:26
intQueue.back:33
intQueue.front:18
intQueue :
18 50 33
.net
關係函數對象:code
示例代碼:對象
#include <iostream> #include <algorithm> #include <string> #include <numeric> #include <iterator> #include <vector> #include <functional> using namespace std; int main() { // 等於 equal_to<int> compare; bool isEqual = compare(6,6); cout << "isEqual=" << isEqual << endl; // 大於 greater<string> greaterString; string s1 = "hello"; string s2 = "there"; if (greaterString(s1, s2)) { cout << s1 << " is greater than " << s2 << endl; } else { cout << s2 << " is greater than " << s1 << endl; } int temp[8] = {2,3,4,5,1,7,8,9}; vector<int> vecList(temp,temp+8); vector<int>::iterator intItr1,intItr2; ostream_iterator<int> screen(cout, " "); cout << "vecList:" <<endl; copy(vecList.begin(),vecList.end(),screen); cout << endl; intItr1 = adjacent_find(vecList.begin(),vecList.end(),greater<int>()); intItr2 = intItr1 + 1; cout << "intItr1:" << *intItr1 <<",intItr2:" << *intItr2 << endl; cout << "psition:" << vecList.end() - intItr2 << endl; cout << "psition:" << intItr2 - vecList.begin() << endl; return 0; }
isEqual=1
there is greater than hello
vecList:
2 3 4 5 1 7 8 9
intItr1:5,intItr2:1
psition:4
psition:4
blog
邏輯運算對象: