内容纲要
210讲 STL案例1-评委打分
案例描述
有5 名选手:ABCDE ,10个评委分别对每一名选手打分,去掉一个最高分,去掉评委中最低分,取平均分。
实现步骤
-
创建5 名选手,放到vector 中
-
遍历vector 容器,取出每一个选手,执行for 循环,可以把10个评分打分到deque 容器中
-
sort 算法对 deque容器中分数排序,去掉最高分和最低分
-
deque容器遍历一遍,累加总分。
-
获取平均分
#include<iostream>
#include"string"
#include<vector>
#include<ctime>
#include<deque>
#include<algorithm>
using namespace std;
class Sector {
public:
Sector(string name,deque<int> score)
{
this->name = name;
this->score = score;
}
string name;
deque<int> score;
//平均分
double averageSCORE;
};
/*
1. 创建5 名选手,放到vector 中
2. 遍历vector 容器,取出每一个选手,执行for 循环,可以把10个评分打分到deque 容器中
3. sort 算法对 deque容器中分数排序,去掉最高分和最低分
4. deque容器遍历一遍,累加总分。
5. 获取平均分
*/
void printSector(const vector<Sector> vSector)
{
//1.先打印输出姓名;
for (vector<Sector>::const_iterator it = vSector.begin(); it!=vSector.end(); it++)
{
cout << (*it).name << "\t";
cout << "分数为:";
for (deque<int>::const_iterator dit = (*it).score.begin();dit != (*it).score.end();dit++)
{
cout << *dit << " ";
}
cout << "average = " << it->averageSCORE;
cout << endl;
}
}
//初始化sector //也就是为成员添加分数
void initSector(vector<Sector> §or)
{
for (int i = 0;i < 5;i++)
{
//初始化分数
deque<int> scoreAdd;
for (int j = 0;j < 10; j++)
{
int score = rand() % 41 + 60;
scoreAdd.push_back(score);
}
//分数排序
deque<int>::iterator start = scoreAdd.begin();
deque<int>::iterator end = scoreAdd.end();
sort(start, end);
//初始化选手姓名
string nameDefine = "选手";
string nameSeed = "ABCDE";
string name = nameDefine + nameSeed[i];
//创建Sector对象
Sector sectorAdd(name, scoreAdd);
sector.push_back(sectorAdd);
}
}
void judge(vector<Sector> §or)
{
for (vector<Sector>::iterator vit = sector.begin();vit != sector.end();vit++)
{
//去掉最高分和最低分
(*vit).score.pop_back();
(*vit).score.pop_front();
double totalSCORE = 0;
//通过迭代器算出成员的总分
for (deque<int>::iterator dit = vit->score.begin();dit != vit->score.end();dit++)
{
totalSCORE += (*dit);
cout << "总分为:" << totalSCORE << endl;
}
//将平均分放入到对象中
vit->averageSCORE = (totalSCORE / 8);
}
}
void main() {
vector<Sector> sector;
//初始化sector
initSector(sector);
//平均
judge(sector);
//打印sector
printSector(sector);
}