STL之函式物件

2021-06-21 12:47:59 字數 2079 閱讀 9733

目錄

為了使類屬演算法具有靈活性,stl常使用函式的過載機制為演算法提供兩種形式。演算法的第一種形式使用的是常規的操作來實現。第二種形式中,演算法可以根據使用者指定的準測對元素經行處理。

函式物件包含了乙個可以通過函式呼叫運算子()使用的函式。實際上,函式物件是過載了函式呼叫運算子operator()的類模板。

使用者可以建立自己的函式物件。stl提供了算術函式物件,關係函式物件,邏輯函式物件。

算術函式物件:

plus加

minus減

multiplies乘

divides除

modulus模

negate取反

示例**:

#include #include #include #include #include #include #include using namespace std;

int functadd(plus,int,int);

int main() ;

vectorintslist(list,list+8);

ostream_iteratorscreenout(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());

cout << "product:" << product << endl;

return 0;

}int functadd(plussum,int x,int y)

執行結果:

intqueue.front:26

intqueue.back:33

intqueue.front:18

intqueue :

18 50 33

關係函式物件:

equal_to等於

not_equal_to不等於

greater大於

greater_equal大於等於

less小於

less_equal小於等於

示例**:

#include #include #include #include #include #include #include using namespace std;

int main() else

int temp[8] = ;

vectorveclist(temp,temp+8);

vector::iterator intitr1,intitr2;

ostream_iteratorscreen(cout, " ");

cout << "veclist:" <());

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

邏輯運算物件:

logical_not

logical_and

logical_or

STL之函式物件

過載函式呼叫操作符的類,其物件常稱為函式物件 function object 即它們是行為類似函式的物件,也叫仿函式 functor 其實就是過載 操作符,使得類物件可以像函式那樣呼叫。假定某個類有乙個過載的operator 而且過載的operator 要求獲取乙個引數,我們就將這個類稱為 一元仿函...

STL之函式物件事例

for each transform bind1st 函式的使用。知識點 如果stl函式需要乙個一元函式,而現有乙個能完成相應工作的自適應二元函式,則 可以使用bind1st 或bind2nd使該二元函式適用於一元介面。程式輸出 gr8 36 39 42 45 48 m8 25 27 29 31 3...

STL函式物件之自定義函式物件

如何定義自己的函式物件,它使用於任何的繫結器 要定義自己的繫結器要滿足一定的條件 必須提供引數和返回值的型別。stl為我們提供了兩個結構體 template struct unary function template struct binary function 乙個例子 template str...