Bind2nd原始碼解析

2021-06-22 18:13:14 字數 1272 閱讀 8974

例:transform(coll1.begin(), coll1.end(), back_inserter(coll2), bind2nd(multiplies(), 10));

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

// template function bind2nd

templateinline

binder2nd<_fn2> bind2nd(const _fn2& _func, const _ty& _right)

2、模板類binder2nd的定義:

// template class binder2nd

templateclass binder2nd

: public unary_function//設定引數型別和返回值型別

result_type operator()(const argument_type& _left) const //呼叫仿函式

return (op(_left, value));

} result_type operator()(argument_type& _left) const

return (op(_left, value));

}protected:

typename _fn2::second_argument_type value; // the right operand

};

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

// functional stuff (from )

// template struct unary_function

templatestruct unary_function

;

bind2nd模板函式返回乙個binder2nd臨時物件,該物件也是個函式物件,在演算法transform呼叫binder2nd仿函式時,binder2nd呼叫第乙個引數指定的函式物件。

演算法transform的原始碼:

// template function transform with unary op  //只是其中乙個定義

templateinline

_outit _transform(_init _first, _init _last,

_outit _dest, _fn1 _func)



Bind2nd原始碼解析

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

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 ...