for_each有一個獨門絕技,其他演算法沒有,那就是可以返回值來獲取函式的狀態
#include <iostream> #include <vector> #include <algorithm> using namespace std; class MeanValue{ private: long num; long sum; public: MeanValue():num(0),sum(0){} void operator() (int elem){ num ++ ; sum += elem; } double value(){ return static_cast<double>(sum)/static_cast<double>(num); } }; int main(){ vector<int> coll; for(int i = 1;i <= 8; ++i){ coll.push_back(i); } MeanValue mv = for_each(coll.begin(),coll.end(),MeanValue()); //注意 cout<<"mean value:"<< mv.value()<<endl; }
要讓自定義仿函式也可以使用函式配接器,必須讓自定義類繼承binary_function,以支援一些型別成員