STL中bind2nd的用法

2021-08-22 06:41:53 字數 1071 閱讀 2435

比如我們有下面的類:

class

clxecs;};

和下面的乙個vector:

vector

<

clxecs

*>

vecs;

for(

inti=0

;i<

13;i++)

如果要對容器vecs中的所有物件都進行dosomething()的操作,可以用下面的方法:

for_each(vecs.begin(),vecs.end(),mem_fun(

&clxecs::dosomething));

(關於mem_fun的用法可以參考我的那篇《stl中mem_fun和mem_fun_ref的用法》)

當然,我們也可以用下面的方法:

intdosomething(clxecs

*pecs)

for_each(vecs.begin(),vecs.end(),

&dosomething);

從上面的**可以看到,兩種方法其實都是呼叫類clxecs的dosomething()方法。在這裡,方法dosomething()是沒有引數的,如果這個方法像下面那樣是有引數的,該用什麼方法傳遞引數呢?

class

clxecs};

這個時候就該我們的bind2nd登場了!下面是具體的**:

//mem_fun1是mem_fun支援乙個引數的版本

for_each(vecs.begin(),vecs.end(),bind2nd(mem_fun1(

&clxecs::dosomething),

13));

或者:intdosomething(clxecs

*pecs,

intivalue)

for_each(vecs.begin(),vecs.end(),bind2nd(ptr_fun(dosomething),

13));

從上面的**可以看出,bind2nd的作用就是繫結函式子的引數的。可是stl只提供了對乙個引數的支援。如果函式的引數多於1個,那就無能為力了。

Bind2nd原始碼解析

例 transform coll1.begin coll1.end back inserter coll2 bind2nd multiplies 10 1 呼叫模板函式bind2nd,第乙個引數為multiplies臨時物件。template function bind2nd templateinl...

Bind2nd原始碼解析

例如 include include include include using namespace std intmain int argc,char ar 接著下面有bind2nd的具體實現 cout count if coll.begin coll.end bind2nd greater in...

c bind1st 和 bind2nd的用法

std bind1st 和 std bind2nd將二元函式轉換為一元函式,具體用法參加下面的 介紹了兩種使用方式,第一種是使用std less和std greater,第二種是使用自定義的仿函式。include include include include include include std...