C++基础--STL基础- 案例一

本文介绍了一种评分系统的实现方式,包括使用C++编程语言、容器(如vector和deque)、算法(如sort)来帮助去除最高和最低分,并计算平均得分。通过两种不同的方法实现:一种是直接使用容器和迭代器,另一种则是定义选手类进行操作。
#include<iostream>
#include<unistd.h>
#include<string>
#include<vector>
#include<deque>
#include<ctime>
#include<algorithm>//标准算法的头文件

using namespace std;

//案例描述
//选手ABCDE,10个评委分别对每一名选手,去除最高分,去除最低分,取平均分

//思路
//5名选手-->vector
//遍历vector,取出每一名选手,执行for循环,把打分放入deque容器
//根据sort排序deque
//计算得分

//最大区别 我结果论 老师 以选手作为出发点,思考针对选手的一系列属性和行为

//我的做法
void test01()
{
	vector<char> xs;
	xs.push_back('a');
	xs.push_back('b');
	xs.push_back('c');
	xs.push_back('d');
	xs.push_back('e');
	
	for(int i=0;i<xs.size();i++)
	{
		deque<int> d;
		int num=0;
		int zf = 0;
		cout << xs[i] << " score: "<<endl;
		for(int j=0;j<10;j++)
		{
			cout << j<<": ";
			cin >> num;
			d.push_back(num);
			cout << endl;
		} 
		sort(d.begin(),d.end());
		for(deque<int>::iterator it = (d.begin()+1);it!=(d.end()-1);it++)
		{
			zf+=*it;
		}
		cout << xs[i]<<"the last score is: "<<zf/(8)<<endl;
	}
}


//老师的做法
//创建选手类
class person
{
public:
	person(string name,int score)
	{
		m_name = name;
		m_score  = score;
	}
	string m_name;
	int m_score;
};

void createperson(vector<person>&p)
{
	string nameSeed = "ABCDE";

	for(int i = 0; i< 5;i++)
	{
		string name = "选手";
		name += nameSeed[i];
		
		int score = 0;
		person p1(name,score);
		
		//将创建的对象放入容器中
		p.push_back(p1);		
	}	
}

//打分
void setScore(vector<person>&v)
{
	for(vector<person>::iterator it = v.begin();it!=v.end();it++)
	{
		//将评委的分数 放入到deque容器中
		deque<int> d;
		for(int i=0;i<10;i++)
		{
			int score = rand()%41 + 60; // 60~100    rand()%40 范围是0-39 所以要 rand()%41;
			d.push_back(score);
		}
		sort(d.begin(),d.end());
		
		//去除最高和最低分
		d.pop_back();
		d.pop_front();
		
		//取平均分
		int sum = 0;
		for(deque<int>::iterator dit = d.begin();dit!=d.end();dit++)
		{
			sum += *dit;
		}
		int avg = sum / d.size();
	
		//将平均分赋值到选手身上
		it->m_score = avg;
	}	
}
void test02()
{

	//创建五名选手
	vector<person> p;
	createperson(p);

	//测试
	for(vector<person>::iterator it = p.begin();it!=p.end();it++)
	{
		cout << (*it).m_name << (*it).m_score<<endl;
	}

	setScore(p);

	//测试
	for(vector<person>::iterator it = p.begin();it!=p.end();it++)
	{
		cout << (*it).m_name << (*it).m_score<<endl;
	}
	
}
int main(void)
{
	//随机数种子
	srand((unsigned int)time(NULL));

	test02();
	pause();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值