1. for_each( b, e, p )
2 使用for_each() 算法遍历数据
3. 使用for_each() 和函数对象修改数据
4. 使用for_each() 的返回值
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void print(int elem)
{
cout<<elem<<' ';
}
//这是模版, 这样写了之后,加入你声明一个 T a ;以后为 a赋值 整型,则
//T为int 如果 你赋值为 double类型的数,此时 T就为double 。
//AddValue<int> template<class T>
class AddValue
{
private:
T theValue;
public:
AddValue(const T& v):theValue(v){}
void operator()(T& elem) const
{
elem += theValue;
}
};
class MeanValue{
private:
long num;
long sum;
public:
MeanValue():num(0),sum(0){}
void operator() (int elem)
{
num++;
sum += elem;
}
double value()
{
return sum/num;
}
operator double()
{
return static_cast<double>(sum) / static_cast<double>(num);
}
};
int main( int argc, char** argv )
{
vector<int> vec;
for(int i=0; i<9; ++i)
{
vec.insert(vec.end(), i);
}
for_each(vec.begin(), vec.end(), print );
cout<<endl;
//for_each(vec.begin(), vec.end(), AddValue<int>(10));
for_each(vec.begin(), vec.end(), AddValue<int>(*(++vec.begin())) );
for_each(vec.begin(), vec.end(), print );
cout<<endl;
MeanValue mv = for_each(vec.begin(), vec.end(), MeanValue());
cout<<"average:"<<mv.value()<<endl;
double result = for_each(vec.begin(), vec.end(), MeanValue());
cout<<"average:"<<result<<endl;
return 0;
}