STL 學習筆記 之 函式物件

2021-06-18 04:34:16 字數 2072 閱讀 5601

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 的類...