#include <iostream>
#include <vector>
#include <time.h>
#include <deque>
#include <algorithm>
using namespace std; // 评委打分案例(sort 算法排序)
// 创建 5 个选手(姓名,得分) , 10 个评委对 5 个选手进行打分
// 得分规则:去除最高分,去除最低分,取出平均分
// 按得分对 5 名选手进行排名 // 选手类
class Player
{
public:
Player(){}
Player(string name, int score) :mName(name), mScore(score){}
public:
string mName;
int mScore;
}; // 创建选手
void CreatePlayer(vector<Player>& v)
{
string nameSeed = "ABCDE";
for (int i = ; i < ; i++)
{
Player p;
p.mName = "选手";
p.mName += nameSeed.at(i);
p.mScore = ;
v.push_back(p);
}
} // 下面for_each函数的回调函数
void PrintScore(int val)
{
cout << val << " ";
} // 打分
void SetScore(vector<Player>& p)
{
srand(time(NULL));
for (vector<Player>::iterator it = p.begin(); it != p.end(); it++)
{
// 给当前学生进行打分
deque<int> dScore;
for (int i = ; i < ; i++)
{
int score = rand() % + ;
cout << score << " ";
dScore.push_back(score);
}
cout << endl; // 对分数进行排序 默认从小到大
sort(dScore.begin(), dScore.end());
// 打印排序后的分数
for_each(dScore.begin(), dScore.end(), PrintScore);
cout << endl; // 去除最高分 去除最低分
dScore.pop_back();
dScore.pop_front();
// 求平均分
// 总分
int totalScore = ;
for (deque<int>::iterator it = dScore.begin(); it != dScore.end(); it++)
{
totalScore += *(it);
}
// 平均分
int avgScore = totalScore / dScore.size();
// 保存分数
(*it).mScore = avgScore;
cout << "-------------------------" << endl;
} } // 排序规则(下面sort函数的回调函数)
bool myCompare(Player& p1, Player& p2)
{
return p1.mScore > p2.mScore;
} // 根据选手分数排名 sort默认从小到大排序 希望是从大到小排序
void Print_Rank(vector<Player> v)
{
// 排序
sort(v.begin(), v.end(), myCompare);
// 打印
for (int i = ; i < v.size(); i++)
{
cout << "姓名:" << v.at(i).mName.c_str() << " 得分:" << v.at(i).mScore << endl;
}
} int main()
{
vector<Player> p;
CreatePlayer(p);
SetScore(p);
Print_Rank(p);
getchar();
return ;
}

C++ STL 之 deque容器 打分案例(内含sort排序用法)的更多相关文章

  1. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  2. STL之Deque容器

    1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...

  3. [转]STL之deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

  4. 浅谈C++ STL deque 容器

    浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...

  5. deque容器

    一.deque容器基本概念 deque是“double-ended queue”的缩写,和vector一样,deque也支持随机存取.vector是单向开口的连续性空间,deque则是一种双向开口的连 ...

  6. [代码][deque容器练习]打分案例

    案例要求: //打分案例(sort算法排序)//创建5个选手(姓名.得分),十个评委对五个选手进行打分//得分规则:去除最高分,去除最低分,取出平均分//按得分对5个选手进行排名 源代码: //打分案 ...

  7. C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

    课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...

  8. STL之序列容器deque

    首先看看deque的模板声明: template <class T,  class Alloc = allocator<T>>  // 原本还有个参数BufSize,现在新版本 ...

  9. STL学习三:deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

随机推荐

  1. C之内存地址

    计算机的内存地址 * 32位系统最多能识别4G内存 * 32位系统的地址总线长度是32位的,也就是说能分配给内存地址的数字是 2的32次方个 * 内存中每一个字节都需要一个内存地址 * 一个数字对用一 ...

  2. [Java读书笔记] Effective Java(Third Edition) 第 5 章 泛型

    第 26 条:请不要使用原生态类型 声明中具有一个或多个类型参数的类或者接口,就是泛型(generic). 例如List接口只有单个类型参数E, 表示列表的元素类型.这个接口全称List<E&g ...

  3. [ML] Bayesian Logistic Regression

    简单概率分类 Ref: 逻辑回归与朴素贝叶斯有什么区别? Ref: 机器学习笔记——逻辑回归(对数几率回归)和朴素贝叶斯分类器的对比 首先,搞清楚一个问题. naive bayes 能分类:逻辑回归也 ...

  4. 处理HTTP请求

    处理HTTP请求 当客户端浏览器通过URL访问web应用时,首先要做的就是获取用户提交的信息,也就是从HTTP请求数据中获得的信息.HTTP请求数据分为HTTP请求头和Body HTTP请求头包含了一 ...

  5. 提取站长之家IP批量查询

    1.工具说明 写报告的时候为了细致性,要把IP地址对应的地区给整理出来.500多条IP地址找出对应地区复制粘贴到报告里整了一个上午. 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本. 使 ...

  6. Hadoop学习笔记之三 数据流向

    http://hadoop.apache.org/docs/r1.2.1/api/index.html 最基本的: 1. 文本文件的解析 2. 序列文件的解析 toString会将Byte数组中的内存 ...

  7. ffmpeg学习笔记-初识ffmpeg

    ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...

  8. spring中@Profile的作用

    根据系统环境的不同,Profile可以用来切换数据源.例如切换开发,测试,生产环境的数据源. 举个例子: 先创建配置类MainProfileConfig: @Configuration @Proper ...

  9. Java编程思想(二)一切都是对象

    2.1用句柄操纵对象 尽管一切都看作是对象,但是操纵的标识符实际上是指向一个对象的“句柄”(handdle): 拥有一个句柄并不表示必须有一个对象同他连接: String  s:   这里创建的只是句 ...

  10. 什么是Metrics-(通俗易懂)

    在应用程序中,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如一个系统后台服务,我 ...