函数适配器问题

vcgaoshou 2008-10-30 09:33:55
二元函数适配器bind2ndz在算法中如下使用count_if(v1.begin(),v1.end(),bind2nd(less<int(),12));
那么这一算法的执行流程是否是这样的
1。根据定义bind2nd(less<int(),12)
template<class _Bfn, class _Ty> inline
binder2nd<_Bfn> bind2nd(const _Bfn& _X, const _Ty& _Y)
{return (binder2nd<_Bfn>(_X,
_Bfn::second_argument_type(_Y))); }
首先执行return (binder2nd<_Bfn>(_X,_Bfn::second_argument_type(_Y)));
这里的类型_Bfn 应该实例化成binary_function;_X就应该是less<int()
2。执行binder2nd的构造函数,构造一个binder2nd对象
binder2nd(const _Bfn& _X,const _Bfn::second_argument_type& _Y): op(_X), value(_Y){}
3.返回binder2nd对象到count_if(v1.begin(),v1.end(),bind2nd(less<int(),12))算法中,进行循环。
4。上述过程在v1.begin(),v1.end()循环中,是执行一次,还是循环中每一次都要重复以上过程
5。那位老师能给我一个学习mem_fun,ptr_fun,并能提供例题的参考网站
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liumingrong 2008-10-30
  • 打赏
  • 举报
回复
你的分析基本上是正确的

4.肯定不会多次重复这个过程,count_if是个函数模板,你调用一次,当然只会传参一次,
这个参数就是上面过程得到的一个函数对象
建议你先看看《c++程序设计语言(特别版)》,内容详尽,c++之父写的,c++的葵花宝典

[Quote=引用楼主 vcgaoshou 的帖子:]
二元函数适配器bind2ndz在算法中如下使用count_if(v1.begin(),v1.end(),bind2nd(less <int(),12));
那么这一算法的执行流程是否是这样的
1。根据定义bind2nd(less <int(),12)
template <class _Bfn, class _Ty> inline
binder2nd <_Bfn> bind2nd(const _Bfn& _X, const _Ty& _Y)
{return (binder2nd <_Bfn>(_X,
_Bfn::second_argument_type(_Y))); }
首先执行return (binder2nd <_Bfn>(_X,_Bfn::second_argument_t…
[/Quote]
yshuise 2008-10-30
  • 打赏
  • 举报
回复
的确,这些操作看起来古怪,令人不适应。
Super.Jiju 2008-10-30
  • 打赏
  • 举报
回复
帮顶..........
帅得不敢出门 2008-10-30
  • 打赏
  • 举报
回复
stl中文版也有源代码
taodm 2008-10-30
  • 打赏
  • 举报
回复
买本《STL源码剖析》就什么都清楚了。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧