STL中函式介面卡

2021-10-04 03:03:31 字數 3414 閱讀 4279

首先為什麼要用函式介面卡?

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函式介面轉函式物件...