#include<iostream>
//for_each可以对存储器的元素进行遍历
#include<algorithm>
#include<vector>
using namespace std;
void print(int elem)
{
cout << elem << " ";
}
//设计成一个模板
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 static_cast<double> (sum) / static_cast<double> (num);
}
operator double()//原来value现在用operator
{
return static_cast<double>(sum) / static_cast<double>(num);
}
};
int main()
{
vector<int> ivec;
for (int i = 1; i <= 9; ++i)
ivec.push_back(i);
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
for_each(ivec.begin(), ivec.end(), AddValue<int>(*(ivec.begin())));//构造函数,10是构造函数的参数
//for_each算法返回值可以做一些设计,返回一些函数对象
for_each(ivec.begin(), ivec.end(), print);//返回是一个函数对象,经过类型转换为double
cout << endl;
//调用meanvalue函数创建了一个函数
MeanValue mv = for_each(ivec.begin(), ivec.end(), MeanValue());//通过mv调用函数,然后去计算平均值
cout << "平均值:" << mv.value() << endl;
system("pause");
return 0;
}
算法-for—
猜你喜欢
转载自blog.csdn.net/weixin_42655231/article/details/82808020
今日推荐
周排行