#include<vector>
#include<deque>
#include<algorithm>
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(string name, int score = 0)
{
this->m_Name = name;
this->m_Score = score;
}
string m_Name;
int m_Score;
};
int main()
{
Person p1("A");
Person p2("B");
Person p3("C");
Person p4("D");
Person p5("E");
vector<Person> vp;
vp.push_back(p1);
vp.push_back(p2);
vp.push_back(p3);
vp.push_back(p4);
vp.push_back(p5);
for (vector<Person>::iterator it = vp.begin(); it != vp.end(); it++)
{
deque<int> dp;
for (int i = 0; i < 10; i++)
{
int score = rand() % 40 + 60;
dp.push_back(score);
}
sort(dp.begin(), dp.end());
dp.pop_back();
dp.pop_front();
int sum = 0;
for (deque<int>::iterator itp = dp.begin(); itp != dp.end(); itp++)
{
sum += (*itp);
}
int average = sum / dp.size();
it->m_Score = average;
cout << it->m_Name << " " << it->m_Score << endl;
}
system("pause");
return 0;
}
每天学点C++(C++实例教程:教程+源码)STL案例1-评委打分.zip
需积分: 0 20 浏览量
更新于2024-06-21
收藏 3.4MB ZIP 举报
C++是一种强大的、通用的编程语言,以其高效性、灵活性和丰富的库支持而著称。在C++中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它为程序员提供了容器、算法和迭代器等核心组件,极大地提高了代码的可重用性和效率。本教程将专注于STL在评委打分案例中的应用。
STL的核心概念包括容器、迭代器、算法和函数对象。容器是存储数据的结构,如vector(动态数组)、list(双向链表)、set(集合)和map(映射)。迭代器则类似于指针,可以遍历并操作容器中的元素。算法是一系列处理容器内元素的操作,如排序、查找和复制。函数对象(也称为仿函数)则可以作为算法的参数,执行特定的操作。
在这个"评委打分"的案例中,可能涉及到的是对一组分数进行处理。我们可以使用vector来存储评委的打分,因为vector允许动态添加元素,且其元素的访问速度较快。例如:
```cpp
#include <vector>
using namespace std;
int main() {
vector<int> scores; // 创建一个存放分数的vector
// 添加评委的打分
scores.push_back(8);
scores.push_back(9);
scores.push_back(7);
// ...
}
```
接下来,我们可能需要用到STL的算法。比如,我们可能想要计算这些分数的平均值,可以使用`accumulate`算法:
```cpp
double average = static_cast<double>(accumulate(scores.begin(), scores.end(), 0)) / scores.size();
```
或者,我们可能希望去除最高分和最低分,计算去掉极端值后的平均分,可以结合`max_element`和`min_element`找到最大最小值,然后用`erase`去除:
```cpp
auto maxScoreIter = max_element(scores.begin(), scores.end());
auto minScoreIter = min_element(scores.begin(), scores.end());
scores.erase(maxScoreIter);
scores.erase(minScoreIter);
double averageWithoutExtremes = static_cast<double>(accumulate(scores.begin(), scores.end(), 0)) / scores.size();
```
此外,如果评委的数目较多,我们可能需要用到`set`或`unordered_set`来确保每个评委的打分只计算一次,避免重复。或者,如果我们想按照评委的名字来组织分数,可以使用`map`:
```cpp
map<string, int> judgesScores; // 评委名字与分数的映射
judgesScores["评委1"] = 8;
judgesScores["评委2"] = 9;
// ...
// 计算平均分
double average = accumulate(judgesScores.begin(), judgesScores.end(), 0.0) / judgesScores.size();
```
这个"评委打分"的案例将展示如何使用C++的STL来高效地处理数据,包括存储、遍历、计算和数据清洗。通过学习这个案例,你可以更深入地理解STL的各个组件,并学会在实际项目中灵活运用。记得实践是检验理论的最好方式,尝试编写代码并运行,这样你会对C++和STL有更深的理解。

不会倒的鸡蛋
- 粉丝: 1634
最新资源
- C语言程序设计实训题目一.doc
- 《信息化进程中的教育技术发展研究》子课题《网络环境下的中职教育理论与实践探索》研--究--报--告.doc
- 计算机数据库入侵检测技术应用.docx
- 基于单片机的电子钟的方案设计书(1)1.doc
- 网络空间安全新形势下的信息安全人才培养.doc
- 童发发的大模型学习之旅
- 自动化生产设备方案.ppt
- 第一节办公自动化基础知识.ppt
- 全国计算机等级考试二级教程MSOffice高级应用.ppt
- 递进式应用型人工智能专业实践教学体系探究.docx
- 新建供欲提高CAD制图画图速度者参考.doc
- 计算机应用技术期末复习题.doc
- 汽车电子商务课程标准.docx
- 基于PLC多层电梯电气设计与调试正板doc.doc
- 加强高校学生网络安全教育研究.docx
- 基于Hadoop平台的大数据应用系统解决方案.docx