首先為什麼要用函式介面卡?
stl中的函式介面卡分類:
(1)繫結介面卡用法
將乙個運算元繫結到給定值而將二元函式物件轉換為一元函式物件。
bind2nd:將給定值繫結到二元函式物件的第二個實參;
bind1st:將給定值繫結到二元函式物件的第乙個引數;
示例程式如下:
#include#include#include#includeusing namespace std;
int main()
; const int n = sizeof(intarr) / sizeof(int);
vectora(intarr, intarr + n);
vector::iterator p = find_if(a.begin(), a.end(), bind2nd(greater(), 40));
if (p == a.end())
cout << "no element greater than 40" << endl;
else
cout << "first element greater than 40 is:" << *p << endl;
system("pause");
return 0;
}
(2)指標函式介面卡用法
對一般自定義的函式使用
#include
#include
#include
#include
using
namespace std;
boolg(
int x,
int y)
intmain()
;const
int n =
sizeof
(intarr)
/sizeof
(int);
vector<
int>
a(intarr, intarr + n)
; vector<
int>
::iterator p =
find_if
(a.begin()
, a.
end(),
bind2nd
(ptr_fun
(g),40)
);if(p == a.
end())
cout <<
"no element greater than 40"
<< endl;
else
cout <<
"first element greater than 40 is:"
<<
*p << endl;
system
("pause");
return0;
}
(3)組合介面卡
not1(…):生成一元函式的邏輯反
not2(…):生成二元函式的邏輯反
#include
#include
#include
#include
using
namespace std;
intmain()
;const
int n =
sizeof
(intarr)
/sizeof
(int);
vector<
int>
a(intarr, intarr + n)
; vector<
int>
::iterator p =
find_if
(a.begin()
, a.
end(),
not1
(bind2nd
(greater<
int>()
,15))
);if(p == a.
end())
cout <<
"no element is not greater than 15"
<< endl;
else
cout <<
"first element that is not greater than 15 is:"
<<
*p << endl;
system
("pause");
return0;
}
#include
#include
#include
#include
using
namespace std;
intmain()
;const
int n =
sizeof
(intarr)
/sizeof
(int);
vector<
int>
a(intarr, intarr + n)
; vector<
int>
::iterator p =
find_if
(a.begin()
, a.
end(),
bind2nd
(not2
(greater<
int>()
),15)
);if(p == a.
end())
cout <<
"no element is not greater than 15"
<< endl;
else
cout <<
"first element that is not greater than 15 is:"
<<
*p << endl;
system
("pause");
return0;
}
(4)成員函式介面卡用法
mem_fun(…):使成員函式作為函式物件,傳入物件指標;
mem_fun_ref(…):使成員函式作為函式物件,傳入物件引用;
#include
#include
#include
#include
using
namespace std;
struct car
void
display()
const};
intmain()
STL介面卡 函式介面卡
有時候需要對內建函式物件返回值進行進一步的簡單計算,或者填上多餘的引數,不能直接代入演算法。函式介面卡實現了這一功能,函式介面卡是將一種函式物件轉化為另一種符合要求的函式物件。函式介面卡可以分為4個大類 繫結介面卡 組合介面卡 指標函式介面卡和成員函式介面卡。需求 在遍歷容器的時候,將容器中的值全部...
STL中的介面卡
選擇自 sevecol 的 blog 我們知道在stl中函式物件發揮著很大作用 find if coll.begin coll.end bind2nd greater 42 這裡bind2nd就是乙個函式物件,他提供了operator 的處理,是的我們可以象呼叫函式一樣操作,這也就是他名字的由來.f...
STL 介面卡實現
函式介面轉函式物件介面的介面卡 內部呼叫引數為指標型別 template class const mem fun t public unary function ret operator const tp p const private ret tp m f const const函式介面轉函式物件...