#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

template <class T>
class CSum
{
    T n;
    static T sum;
public:
    T getsum()
    {
        return sum;
    }

public:
    CSum(T num = 0):n(num){}
    void operator()(CSum v)
    {
        sum+=v.n;
    }
    void fun()
    {
        sum+=n;
    }

};

template <class T>
T CSum<T>::sum = 0;

int main()
{

    vector<CSum<int> > v;
    for(int i =1;i<=100;++i)
        v.push_back(CSum<int>(i));

    //成员函数
    for_each(v.begin(),v.end(),mem_fun_ref(CSum<int>::fun));
    CSum<int> result;
    cout<<result.getsum()<<endl;

    //函数对象
    CSum<int> sObj=for_each(v.begin(),v.end(),CSum<int>());
    cout<<sObj.getsum();

    return 0;
}

备份地址: 【STL中调用函数对象和普通函数差异