C++小练习-stl容器应用

stl容器小练习-运用vector容器与deque容器

有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。

1. 创建五名选手,放到vector中

2. 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中**

3. sort算法对deque容器中分数排序,pop_back pop_front去除最高和最低分

4. deque容器遍历一遍,累加分数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <vector>
#include <deque>
#include <random>

using namespace std;

// 定义Person类
class Person {
private:
string name; // 姓名
deque<int> deq; // 成绩队列
int average; // 平均成绩
public:
// 获取平均成绩
int getAverage() const {
return average;
}

// 设置平均成绩
void setAverage(int average) {
Person::average = average;
}

// 获取姓名
const string &getName() const {
return name;
}

// 设置姓名
void setName(const string &name) {
Person::name = name;
}

// 获取成绩队列
const deque<int> &getDeq() const {
return deq;
}

// 向成绩队列中添加成绩
void pushBackDeque(int num) {
deq.push_back(num);
}

// 从成绩队列中删除指定位置的成绩
void eraseDeque(int index) {
deq.erase(deq.begin() + index);
}

// 设置成绩队列
void setDeq(const deque<int> &deq) {
Person::deq = deq;
}

// 默认构造函数
Person() {}

// 带参数的构造函数
Person(const string &name, const deque<int> &deq, const int &average) : name(name), deq(deq), average(average) {}

// 析构函数
~Person() {}
};

// 生成随机数,用于模拟成绩
int randomNum() {
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(0, 10);
return dis(gen);
}

// 为Person对象打分,即随机生成成绩并添加到成绩队列中
void mark(Person &p) {
for (int i = 0; i < 10; i++) {
p.pushBackDeque(randomNum());
}
}

// 移除Person成绩中的最高分和最低分
void removeExtremum(Person &p) {
int minIndex = 0;
int maxIndex = 0;
for (int i = 1; i < 10; i++) {
minIndex = p.getDeq().at(minIndex) > p.getDeq().at(i) ? i : minIndex;
maxIndex = p.getDeq().at(maxIndex)< p.getDeq().at(i) ? i : maxIndex;
}
if (maxIndex > minIndex) {
p.eraseDeque(maxIndex);
p.eraseDeque(minIndex);
} else {
p.eraseDeque(minIndex);
p.eraseDeque(maxIndex);
}
}

// 计算Person成绩的平均值
int average(Person &p) {
int sum = 0;
for (int i = 0; i < 8; i++) {
sum += p.getDeq().at(i);
}
return sum / 8;
}

// 创建一个包含Person对象的向量
vector<Person> createVector() {
vector<Person> v;
for (int i = 0; i < 5; i++) {
cout << "请输入名字:" << endl;
string name;
cin >> name;
Person p;
p.setName(name);
mark(p);
removeExtremum(p);
p.setAverage(average(p));
v.push_back(p);
}
return v;
}

// 打印向量中每个Person的信息
void printVector(const vector<Person> &v) {
for (int i = 0; i < 5; i++) {
cout << v.at(i).getName() << "的成绩为:";
for (int j = 0; j < 8; j++) {
cout << v.at(i).getDeq().at(j) << " ";
}
cout << "平均成绩为:" << v.at(i).getAverage() << endl;
}
}

// 测试函数,调用printVector函数
void test() {
printVector(createVector());
}

int main() {
test();
return 0;
}