一元組合函式配接器
最簡單的組合型函式配接器,是將某個一元運算結果作為另外乙個一元運算的輸入。其實這只不過是巢狀呼叫兩個一元仿函式。
例如,如果你要構造乙個運算「先加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...