關於在標準庫算法中使用函數對象的一點認識

在程序的設計中,標準庫算法例如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掉該變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章