C 標準庫 組合型仿函式

2021-06-27 16:24:48 字數 2280 閱讀 9307

一元組合函式配接器

最簡單的組合型函式配接器,是將某個一元運算結果作為另外乙個一元運算的輸入。其實這只不過是巢狀呼叫兩個一元仿函式。

例如,如果你要構造乙個運算「先加10再乘以4」,就會用到這個函式配接器。

**示例:

//compose_f_gx_t

#include#include#include#include#includeusing namespace std;

templateclass compose_f_gx_t:public unary_function

typename op1::result_type

operator()(const typename op2::argument_type& x) const };

templateinline compose_f_gx_tcompose_f_gx(const op1& o1,const op2& o2)

void print(int elem)

for_each(coll.begin(),coll.end(),print);

cout<(cout," "),compose_f_gx(bind2nd(multiplies(),4),bind2nd(plus(),10)));

cout<

1 2 3 4 5 6 7 8 9

44 48 52 56 60 64 68 72 76

如何將兩個準則加以邏輯組合,形成單一準則,例如,「大於4且小於7」。sgi stl 實做版本稱之為compose2.

**示例:

//compose_f_gx_hx_t

#include#include#include#includeusing namespace std;

templateclass compose_f_gx_hx_t:public unary_function

typename op1::result_type

operator()(const typename op2::argument_type& x) const };

templateinline compose_f_gx_hx_tcompose_f_gx_hx(const op1& o1,const op2& o2,const op3& o3)

void print(int elem)

for_each(coll.begin(),coll.end(),print);

cout<::iterator pos;

pos=remove_if(coll.begin(),coll.end(),compose_f_gx_hx(logical_and(),bind2nd(greater(),4),bind2nd(less(),7)));

coll.erase(pos,coll.end());

for_each(coll.begin(),coll.end(),print);

cout<

1 2 3 4 5 6 7 8 9

1 2 3 4 7 8 9

二元組合函式配接器

二元組合函式配接器,可以將兩個一元運算(分別接受不同引數)的結果加以處理。

**示例:

//二元組合函式配接器

#include#include#include#include#include#includeusing namespace std;

templateclass compose_f_gx_hy_t:public binary_function

typename op1::result_type

operator()(const typename op2::argument_type& x,const typename op3::argument_type& y) const };

templateinline compose_f_gx_hy_tcompose_f_gx_hy(const op1& o1,const op2& o2,const op3& o3)

int main()

{ string s="lanzhihui";

string sub="zhi";

string::iterator pos;

pos=search(s.begin(),s.end(),sub.begin(),sub.end(),compose_f_gx_hy(equal_to(),ptr_fun(::toupper),ptr_fun(::toupper)));//兩個字元都為大寫,故不區分大小寫找子字串

if(pos!=s.end())

{ cout<<"\""<

"zhi" is part of "lanzhihui"

C 仿函式在stl標準庫的比較問題)

所謂仿函式相當於c 中的delegate,應該說delegate是把這個功能另外抽象了出來,便於區分。在stl標準庫的容器中,如map型,經常會需要用到自定義的或者非基本型別的物件作為key,但是插入的時候需要對key進行比較,c 自身沒有比較功能,就需要實現乙個仿函式 委託 來告訴stl的容器這些...

仿射函式和仿射組合

假設f是乙個矢性函式,若它可以表示為f x1,x2,xn a1x1 a2x2 anxn b,其中ai可以是標量,也可以是矩陣,則稱f是仿射函式。矢性函式定義 標性函式f x ax b 即我們通常見到的函式 其中a x b都是標量。維基百科的解釋 affine combination,a certai...

泛型仿函式三

成員函式指標 有些c 編譯器廠商定義出一種新型別,讓你可以通過以下語法儲存operator.操作結果 void closure geronimoswork geronimo.pactivity geronimoswork template class memfunhandler public fun...