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,以支持一些型别成员