例如:
#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 ...