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

来源:互联网 发布:域名第二年多少钱 编辑:程序博客网 时间:2024/06/14 17:26
在程序的设计中,标准库算法例如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
原创粉丝点击