路漫漫其修远兮,吾将上下而求索
deque容器,出门直接右转即可Day09 C++STL入门基础知识六——deque容器 构造函数-赋值操作-大小操作-插入删除-数据存储-排序操作【全面深度剖析+例题代码展示】
有5名选手:选手ABCDE, 10个评委分别对每一名选手打分, 去除最高分,去除评委中最低分,取平均分。
#include
//创建选手的类,属性为所要输出的姓名和平均分
class player {
public:
player(string name, int avescore) {
this->m_name = name;
this->m_avescore = avescore;
}
public:
string m_name;
int m_avescore;
};
vector
容器vector
容器用于存放选手的类,对5名选手进行初始化creatPlayer()
函数(1) 通过下标遍历初始化
string selectname = "ABCDE";
for (int i = 0; i < 5; i++) {
string name = "选手";
name += selectname[i]; //先给定所有选手姓名代号,再通过下标遍历访问
}
(2) 通过i值自增初始化
for (int i = 0; i < 5; i++) {
string name="选手";
name += 'A' + i; //题过i的值增加改变选手姓名
}
int ave_score = 0;
Player p(name, ave_score);
v.push_back(p);
//创建5名选手【初始化其姓名和平均分】
void creatPlayer(vector<Player>& v) { //实参和形参都要修改,所以要用&!!!
for (int i = 0; i < 5; i++) {
string name = "选手";
name += 'A' + i; //题过i的值增加改变选手姓名
int ave_score = 0;
Player p(name, ave_score);
v.push_back(p);
}
//或者如下
//string selectname = "ABCDE";
//for (int i = 0; i < 5; i++) {
// string name = "选手";
// name += selectname[i]; //先给定所有选手姓名代号,再通过下标遍历访问
// int ave_score = 0;
// Player p(name, ave_score);
//v.push_back(p);
//}
}
void show1Player(vector<Player>& v) {
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名为: " << it->m_name << " 平均分为: " << it->m_avescore << endl;
}
}
int main() {
//创建5名选手
vector<Player> v; //存放选手容器
creatPlayer(v); //创建5名选手,并将其放入容器
show1Player(v); //展示一下初始化的结果
return 0;
}
发现没有报错,可以继续敲啦
原因是的
deque
是两端数组,头尾皆可对数据进行插入删除。而vector
容器只能对尾部进行插删,本题要删除最大值和最小值,使用vector
会极大影响运行效率,故使用deque
容器。不明白的小伙伴们,详细内容见Day09 C++STL入门基础知识六——deque容器 构造函数-赋值操作-大小操作-插入删除-数据存储-排序操作【全面深度剖析+例题代码展示】
答案是否定的,我们可以借助计算机自带的rand()函数来生成随机数,但随机随机,评分数据肯定也是要有范围的,怎么来限制随机数的范围呢???
我们知道当给a%b时,a的结果最大不会超过b。所以我们借助%运算的特性,使用
rand()%x;
可以表示[0,
x)之间的数,rand()%x+y;
就表示[y, x+y) 之间的数了。
所以我们要想随机输出60-100之间的数,只需要int score=rand()%41+60;
即可
void show2score(deque<int>& d) {
for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
cout << (*it) << " ";
}
cout << endl;
}
void inputPlayer(vector<Player>& v) {
//创建deque容器存放10个评委所打的分
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
deque<int> d;
for (int i = 0; i < 10; i++) {
int score = rand() % 41 + 60;
d.push_back(score);
}
//展示评委打的随机值
cout << "姓名为: " << it->m_name << " 打分为: ";
show2score(d);
}
}
int main() {
//创建5名选手
vector<Player> v; //存放选手容器
creatPlayer(v); //创建5名选手,并将其放入容器
show1Player(v); //展示一下初始化的结果
inputPlayer(v); //给5个人打分
return 0;
}
#include
//sort由小到大排序
sort(d.begin(), d.end());
//删去最值
d.pop_back(); //删除最大值
d.pop_front(); //删除最小值
//先求和,再统计平均值
int sum = 0;
for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
sum += (*it); //累加每个评委的打分
}
int size = d.size();
int ave_score = sum / size; //计算每个人的平均分
it->m_avescore = ave_score; //传入类中
void show2Player(vector<Player>& v) {
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名为: " << it->m_name << " 平均分为: " << it->m_avescore << endl;
}
}
int main() {
//创建5名选手
vector<Player> v; //存放选手容器
creatPlayer(v); //创建5名选手,并将其放入容器
show1Player(v); //展示一下初始化的结果
inputPlayer(v); //给5个人打分
show2Player(v); //展示5人平均分情况
return 0;
}
#include
#include
#include
#include
#include
using namespace std;
//创建选手的类,属性为所要输出的姓名和平均分
class Player {
public:
Player(string name, int avescore) {
this->m_name = name;
this->m_avescore = avescore;
}
public:
string m_name;
int m_avescore;
};
//创建5名选手【初始化其姓名和平均分】
void creatPlayer(vector<Player>& v) { //实参和形参都要修改,所以要用&!!!
for (int i = 0; i < 5; i++) {
string name = "选手";
name += 'A' + i; //题过i的值增加改变选手姓名
int ave_score = 0;
Player p(name, ave_score);
v.push_back(p);
}
//或者如下
//string selectname = "ABCDE";
//for (int i = 0; i < 5; i++) {
// string name = "选手";
// name += selectname[i]; //先给定所有选手姓名代号,再通过下标遍历访问
// int ave_score = 0;
// Player p(name, ave_score);
//v.push_back(p);
//}
}
void show1Player(vector<Player>& v) {
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名为: " << it->m_name << " 平均分为: " << it->m_avescore << endl;
}
}
void show2score(deque<int>& d) {
for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
cout << (*it) << " ";
}
cout << endl;
}
void inputPlayer(vector<Player>& v) {
//创建deque容器存放10个评委所打的分
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
deque<int> d;
for (int i = 0; i < 10; i++) {
int score = rand() % 41 + 60;
d.push_back(score);
}
//展示评委打的随机值
cout << "姓名为: " << it->m_name << " 打分为: ";
show2score(d);
//sort由小到大排序
sort(d.begin(), d.end());
//删去最值
d.pop_back(); //删除最大值
d.pop_front(); //删除最小值
//先求和,再统计平均值
int sum = 0;
for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
sum += (*it); //累加每个评委的打分
}
int size = d.size();
int ave_score = sum / size; //计算每个人的平均分
it->m_avescore = ave_score; //传入类中
}
}
void show2Player(vector<Player>& v) {
for (vector<Player>::iterator it = v.begin(); it != v.end(); it++) {
cout << "姓名为: " << it->m_name << " 平均分为: " << it->m_avescore << endl;
}
}
int main() {
//创建5名选手
vector<Player> v; //存放选手容器
creatPlayer(v); //创建5名选手,并将其放入容器
show1Player(v); //展示一下初始化的结果
inputPlayer(v); //给5个人打分
show2Player(v); //展示5人平均分情况
return 0;
}