Bind2nd原始碼解析

2021-09-26 05:37:06 字數 1464 閱讀 2586

例如:

#include

#include

#include

#include

using namespace std;

intmain

(int argc,

char

*ar**)

;// 接著下面有bind2nd的具體實現

cout <<

count_if

(coll.

begin()

, coll.

end(),

bind2nd

(greater<

int>()

,10))

<< endl;

return0;

}

執行結果為:3

返回大於10的數字的個數,共3個。

1、呼叫模板函式bind2nd,第乙個引數為greater臨時物件。

// template function bind2nd

template

inline

binder2nd<_fn2>

bind2nd

(const _fn2& _func,

const _ty& _right)

2、模板類binder2nd的定義:

// template class binder2nd

template

class binder2nd : public unary_function:first_argument_type,

typename _fn2:

:result_type>

result_type operator()

(const argument_type& _left)

const

result_type operator()

(argument_type& _left)

const

protected:

_fn2 op;

typename _fn2:

:second_argument_type value;

// the right operand

};

3、模板類binder2nd模板基類unary_function的定義:

// template struct unary_function

template

struct unary_function

;

4、仿函式greater的定義

// template struct greater

templatevoid

>

struct greater

};

參考:

count_if的用法:

Bind2nd原始碼解析

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

STL中bind2nd的用法

比如我們有下面的類 class clxecs 和下面的乙個vector vector clxecs vecs for inti 0 i 13 i 如果要對容器vecs中的所有物件都進行dosomething 的操作,可以用下面的方法 for each vecs.begin vecs.end mem ...

bind2nd的注意事項 zz

bind2nd 的第一引數是乙個函式 假設為f 那麼 f 的引數不可以為引用,比如,class stock list l l.push back find if l.begin l.end bind2nd mem fun ref stock hasname shell 這個是正確的 find if ...