c++ for_each()與仿函式

OpenSoucre發表於2013-08-11

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,以支援一些型別成員

相關文章