c++ stl,三大核心元件:containers, iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件(functionobject r)。函式物件又稱為仿函式(functor)。函式物件其實就是乙個行為類似函式的「東西」,它可以沒有引數,也可以帶有若干引數,其功能是獲取乙個值,或者改變操作的狀態。
在c++程式設計中,任何普通函式和任何過載了函式呼叫運算子「()」的類的例項都是函式物件,都可以作為引數傳遞給stl演算法。
例如accumulate()演算法
templatetypeaccumulate(inputiterator first, inputiterator last, type val,binaryfunctionbinaryop);
//定義乙個普通函式作為函式物件傳遞給演算法accumulate(),進行累積運算
int mult(int x, int y) ;
accumulate(a, a + n, 1,mult)//
全域性普通函式 mult作為函式物件
如果通過類來定義函式物件:
class multclass //必須過載operator()函式 };
int main() ;
constint n = sizeof(a) / sizeof(int); //求a的元素個數
cout<< "陣列a的元素乘積= "
} 除了通過自定義函式物件的兩種方法外,stl也預定義了若干個函式物件
仿 函 數 名 稱
型別
結果描述
算術類函式物件
加法:plus()
二元函式
arg1 + arg2
減法:minus()
二元函式
arg1 - arg2
乘法:multiples()
二元函式
arg1 * arg2
除法:divides()
二元函式
arg1 / arg2
模取:modules()
二元函式
arg1 % arg2
否定:negate()
一元函式
-arg
關係運算類
函式物件
等同:equal_to()
二元函式
arg1 == arg2
不等於:not_equal_to()
二元函式
arg1 != arg2
大於:greater()
二元函式
arg1 > arg2
大於等於:greater_equal()
二元函式
arg1 >= arg2
小於:less()
二元函式
arg1 < arg2
小於等於:less_equal()
二元函式
arg1 <= arg2
邏輯運算類
函式物件
與:logical_and()
二元函式
arg1 && arg2
或:logical_or()
二元函式
arg1 || arg2
非: logical_not()
二元函式
!arg1
//在下面的語句中將標準二元函式物件multiplies()傳遞給通用演算法
cout << "陣列a的元素乘積= " << accumulate(a, a + n, 1,multiplies())<< endl;
sort(a.begin(), a.end(),greater());
//降序排列
STL學習筆記 六 函式物件
條款38 遵循按值傳遞的原則來設計仿函式 仿函式都是 pass by value function for each inputiterator first,inputiterator last,function f f按值傳遞,結果按值返回 函式物件按值傳遞和按值返回,所以函式物件要盡可能小 物件...
c 學習之STL 函式物件
概念 1.過載函式呼叫操作符的類,其物件常稱為函式物件2.函式物件使用過載的 時,行為類似函式呼叫,也叫仿函式 本質 函式物件 仿函式 是乙個類,不是乙個函式 特點 1.函式物件在使用時,可以像普通函式那樣呼叫,可以有引數,可以有返回值 2.函式物件超出普通函式的概念,函式可以有自己的狀態 3.函式...
STL之函式物件
目錄 為了使類屬演算法具有靈活性,stl常使用函式的過載機制為演算法提供兩種形式。演算法的第一種形式使用的是常規的操作來實現。第二種形式中,演算法可以根據使用者指定的準測對元素經行處理。函式物件包含了乙個可以通過函式呼叫運算子 使用的函式。實際上,函式物件是過載了函式呼叫運算子operator 的類...