关于在标准库算法中使用函数对象的一点认识

在程序的设计中,标准库算法例如std::for_each(InputIterator _First, InputIterator _Last, Function _Func ),std::find_if(InputIterator _First, InputIterator _Last, Predicate _Pred)等等,都非常有用。特别是_Func ,_Pred等操作,允许我们定制针对迭代器所指向的元素的操作。
当_Func,_Pred需要带有一个或多个参数时,stl提供了bind、bind1st等函数来绑定参数。
目前来说,我对这个函数的使用还不多,不大熟悉,接下来会多用用。那么,现在我所使用的方式就是,直接使用带参数的函数对象,就像:Function fn(parameter1,parameter2...);Function 是定义好的类,重载了operator()操作符。这种方式的一个缺点是,如果出现要调用迭代区间中对象的成员函数的情况,且这种很多,则需要大量定义函数对象对应的类。这样,就不如使用bind等方便。


在使用std::for_each(InputIterator _First, InputIterator _Last, Function _Func )时,我还发现,_Func 是通过by_value的方式传递到算法中的,所以如果稍后还要需要利用_Func中某个成员变量的结果,这种方法是不行的,除非这个成员变量是个指针,但这样可能会带来一些麻烦,例如,在析构函数中delete是不大可能了,需要自己动手delete掉该变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值