c++ for_each()与仿函数

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

posted @ 2013-08-11 23:05  OpenSoucre  阅读(463)  评论(0编辑  收藏  举报