#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template<class Type>
class MultValue
{
private:
Type factor;
public:
MultValue(const Type & value):factor(value){}
void operator() (Type & elem)const { elem = elem * factor;}
};
class Average
{
private:
long num;
long sum;
public:
Average():num(0), sum(0){}
void operator() (int elem){num++; sum += elem;}
operator double()
{
return static_cast <double> (sum) / static_cast <double> (num);
}
};
int main()
{
vector<int> v1;
vector<int>::iterator v1_iter;
int i;
for (i = -4; i <= 2; i++)
v1.push_back(i);
cout << "V1:";
for (v1_iter = v1.begin(); v1_iter != v1.end(); v1_iter++)
cout << *v1_iter << " ";
cout << endl;
for_each(v1.begin(), v1.end(), MultValue<int> (-2));
cout << "V1 * -2: ";
for (v1_iter = v1.begin(); v1_iter != v1.end(); v1_iter++)
cout << *v1_iter << " ";
cout << endl;
for_each(v1.begin(), v1.end(), MultValue<int> (5));
cout << "v1 * 5: ";
for (v1_iter = v1.begin(); v1_iter != v1.end(); v1_iter++)
cout << *v1_iter << " ";
cout << endl;
double average = for_each(v1.begin(), v1.end(), Average());
cout << "average is " << average << endl;
system("pause");
exit(0);
}