算法-for—

#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;

}

猜你喜欢

转载自blog.csdn.net/weixin_42655231/article/details/82808020