野百合也有春天

导航

使用std::accumulate计算和、积和平均值

class DPoint
{
public:
	DPoint(double _x,double _y, double _z)
		: x(_x),y(_y),z(_z){}

	double x;
	double y;
	double z;
};

class PointAverage: public binary_function<DPoint, DPoint, DPoint>
{
public:
	PointAverage():xSum(0),ySum(0),zSum(0),numPoints(0){}
	const DPoint operator()(const DPoint& avgSoFar, const DPoint& p)
	{
		++numPoints;
		xSum += p.x;
		ySum += p.y;
		zSum += p.z;
		return DPoint(xSum/numPoints,ySum/numPoints,zSum/numPoints);
	}

private:
	double xSum;
	double ySum;
	double zSum;
	size_t numPoints;
};

int main() 
{

	list<double> ld;
	ld.push_back(1.0);
	ld.push_back(2.0);
	ld.push_back(3.0);
	ld.push_back(4.0);
	double sum = accumulate(ld.begin(),ld.end(),0.0);
	cout<<sum<<endl;

	double product = accumulate(ld.begin(),ld.end(),1.0,multiplies<double>());
	cout<<product<<endl;

	vector<DPoint> pv;
	pv.push_back(DPoint(2,3,5));
	pv.push_back(DPoint(3,4,5));
	pv.push_back(DPoint(5,6,2));

	
	DPoint avg = accumulate(pv.begin(),pv.end(),DPoint(0,0,0),PointAverage());
	cout<<avg.x<<" "<<avg.y<<" "<<avg.z<<endl;

}

posted on 2010-10-20 20:48  flydream  阅读(1288)  评论(1编辑  收藏  举报