C++学习笔记(二十五)

这篇博客介绍了C++中的stack和queue容器,通过一个评委打分的实例展示了如何使用这两种容器。在评委打分案例中,程序模拟了去除最高分和最低分后计算平均分的过程。同时,文章还简要说明了stack容器的先进后出特性以及queue容器的先进先出特性,并给出了相应的示例代码。
摘要由CSDN通过智能技术生成

在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理C++知识点的第二十五篇博客。

本篇博客介绍了C++的stack容器和queue容器,并实现了评委打分案例。

本系列博客所有C++代码都在Visual Studio 2022环境下编译运行。程序为64位。

目录

评委打分

stack容器

queue容器


评委打分

要求对五个选手进行打分,有十个评委,去掉最高分和最低分后取平均分作为选手的最终成绩。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<ctime>
#include<deque>
using namespace std;
class person
{
public:
	person(string name, double score) {
		this->name = name;
		this->score = score;
	}
	string name;
	double score;
};
int main(void)
{
	srand((unsigned int)time(NULL));
	vector<person> v;
	person p1("Isabel", 0);
	person p2("Ivan", 0);
	person p3("Irma", 0);
	person p4("Igor", 0);
	person p5("Ida", 0);

	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);

	for (vector<person>::iterator vit = v.begin();vit < v.end();vit+=1) {
		deque<int> d;
		int i;
		for (i = 0; i < 10; i += 1) {
			int num = rand() % 41 + 60;
			d.push_back(num);
		}

		sort(d.begin(), d.end());
		d.pop_back();
		d.pop_front();

		int sum = 0;
		for (deque<int>::iterator dit = d.begin(); dit < d.end(); dit += 1) {
			sum += *dit;
		}
		double average = sum * 1.0 / 8;

		vit->score = average;
	}

	for (vector<person>::iterator vit = v.begin(); vit < v.end(); vit += 1) {
		cout << "The name is " << vit->name << " the score is " << vit->score << endl;
	}
	return 0;
}

程序创建了person类,包含成员变量name和score,分别表示姓名和分数。随后创建了一个vector容器v,创建了五个学生对象,将成绩暂定为0,随后放入容器v中。接下来用迭代器遍历容器v,在每次循环,都创建一个deque容器d,存储成绩(十个评委的成绩由随机数产生)。随后对d进行排序,排序后去掉最前面的(最低分)和最后面的(最高分),剩余的成绩加起来除以个数就得到最终成绩。随后放入容器中。最后遍历输出。

程序的一次运行结果是:

The name is Isabel the score is 81.625
The name is Ivan the score is 74.75
The name is Irma the score is 88.625
The name is Igor the score is 78.5
The name is Ida the score is 85.25

stack容器

stack容器是先进后出的,只有一个出口。只有顶端的元素才可以被外界访问,不允许遍历。

使用stack需要包含stack头文件。

stack<T> stk建立存储T类型数据的stack容器。

stack(const stack &stk)是拷贝构造函数。

stack& operator=(const stack &stk)重载等号操作符。

push(elem)向顶部加入elem。

pop()移除栈顶的元素。

top()返回栈顶的元素。

empty()判断是否为空,空为true,不空为false。

size()返回栈的大小。

#include<iostream>
#include<stack>
using namespace std;
int main(void)
{
	stack<int> s;
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);
	s.push(50);

	cout << s.size() << endl;
	while (s.empty() == false) {
		cout << s.top() << endl;
		s.pop();
	}
	return 0;
}

程序将五个整数压入栈,随后挨个移出。程序的输出是:

5
50
40
30
20
10

queue容器

queue容器是先进先出的数据结构,有两个出口。queue容器只允许从一端新增元素,另一端移除元素。只有队头和队尾才可以被外界使用,因此不允许遍历。

队列中进数据称为入队,出数据称为出队。

使用queue容器需要包含queue头文件。

queue<T> que创建一个queue容器,存储T类型数据。

queue(const queue &que)是拷贝构造函数。

queue& operator=(const queue &que)重载等号。

push(elem)在队尾加入elem。

pop()在队头删除第一个元素。

back()返回最后一个元素。

front()返回第一个元素。

empty()判断是否为空,空为true,否则为false。

size()返回大小。

#include<iostream>
#include<queue>
using namespace std;
int main(void)
{
	queue<int> q;
	q.push(10);
	q.push(20);
	q.push(30);
	q.push(40);
	q.push(50);

	cout << q.empty() << endl;
	cout << q.size() << endl;
	cout << q.front() << endl;
	cout << q.back() << endl;

	q.pop();
	cout << q.front() << endl;
	cout << q.back() << endl;
	return 0;
}

程序的输出是:

0
5
10
50
20
50

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值