Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】

💃🏼 本人简介:男
👶🏼 年龄:18
🚩 今日留言:亮亮被迫去练科目二啦,定时发布的文章,回来统一给大家三连回复嗷~😉
在这里插入图片描述

1. stack容器——栈

大家不妨想一下生活中,当我们往行李箱里放衣服时,是不是先放进去的衣服被压在最下面,最后才能取出来呢,而最后放进去的衣服最先拿出来呢。如果大家这都能理解的话,那恭喜大家,已经领悟到栈的精髓了哈!!具体特点我们接下来开始讲叭~

1.1 基本概念

1.1.1 特点

① 先进后出
  • stack是一种先进后出的数据结构,它只有一个出口
② 不能遍历
  • 栈容器由于只有顶部元素才能被访问,要想访问栈中其他元素,则需要先把底部元素拿走,但一旦把底部元素拿走,栈的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以栈不能进行遍历操作
③ 可以为空,返回元素个数
  • 栈容器可以为空【通过empty函数()接口】
  • 可以通过入栈时来记录元素的个数【通过size()函数接口】

1.1.2 图解

在这里插入图片描述
在这里插入图片描述

1.2 函数原型

记得头文件#include<stack>

a. 构造函数

  • stack<T> stk; stack采用模板类实现,stack对象的默认构造形式
  • stack(const stack &stk); 拷贝构造函数

b. 赋值操作

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

c. 数据存取

  • push (elem); 向栈顶添加元素
  • pop (); 从栈顶移除第一个元素
  • top (); 返回栈顶元素

d. 大小操作

  • empty(); 判断堆栈是否为空
  • size(); 返回栈的大小

1.3 代码展示

#include<stack>
#include<stdio.h>
#include<iostream>
using namespace std;

void text01() {
	//特点:符合先进后出的数据结构
	stack<int> s;
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);

	cout << "栈的大小: " << s.size() << endl;

	//只要栈不为空,查看栈顶,并执行出栈操作
	while (!s.empty()) {
		
		//查看栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		
		//出栈
		s.pop();
		
		cout << "栈的大小: " << s.size() << endl;
	}
	
}
int main() {
	text01();

	return 0;
}

1.4 测试结果

在这里插入图片描述

2. queue容器——队列

在已逝的2019-2022的三年,相信大家每天都有对核酸支配的经历。我们不妨回忆一下,我们排队做核酸时,先排队的A是不是最先做完可以走呢。而最后排队的B是不是最后一个做完,最后才能走呐??没错,这就是队列的精髓——先进先出!!!接下来关于队列的故事,我们慢慢讲!

2.1 基本概念

2.1.1 特点

① 先进先出
  • 具有两个出口,先进先出
  • 队尾入队,队头出队
  • 队列容器允许从一端新增元素,从另一端移除元素

② 不能遍历

  • 【原因类似于stack的栈】queue队列容器由于只有队头和队尾元素才能被访问,要想访问队中其他元素,则需要先把队头/队尾元素拿走,但一旦把头/尾元素拿走,队列中的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以队列不能进行遍历操作

③ 可以为空,返回元素个数

  • 队列容器可以为空【通过empty函数()接口】
  • 可以返回队列的个数【通过size()函数接口】

2.1.2 图解

在这里插入图片描述
在这里插入图片描述

2.2 函数原型

记得头文件#include<squeue>

a. 构造函数

  • queue<T> que; queue采用模板类实现,queue对象的默认构造形式
  • queue(const queue &que); 拷贝构造函数

b. 赋值操作

  • queue operator=(const queue &que); 重载等号操作符

c. 数据存取

  • push (elem); 向队尾添加元素
  • pop (); 从对头移除第一个元素
  • back(); 返回最后一个元素
  • front (); 返回第一个元素

d. 大小操作

  • empty(); 判断队列是否为空
  • size(); 返回队列的大小

2.3 代码展示

#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;

class Player {
public:
	Player(string name, int age) {
		this->m_name = name;
		this->m_age = age;
	}
public:
	string m_name;
	int m_age;
};
//队列queue
void text01() {
	//创建队列
	queue<Player> q;

	//准备数据
	Player p1("James", 38);
	Player p2("Irving", 30);
	Player p3("Durant", 34);
	Player p4("Rose", 34);
	Player p5("Curry", 34);

	//入队
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	q.push(p5);

	cout << "出队前队列大小为: " << q.size() << endl;
	cout << "------------------------------------------" << endl;
	while ( !q.empty() ) {
		//只要队列不为空,查看队头和队尾
		cout << "队头为: ";
		cout << "姓名: " << q.front().m_name << " 年龄为: " << q.front().m_age << endl;
		cout << "队尾为: ";
		cout << "姓名: " << q.back().m_name << " 年龄为: " << q.back().m_age << endl;
		cout << "------------------------------------------" << endl;
		//出队
		q.pop();
	}
	cout << "出队后大小为: " << q.size() << endl;
}

int main() {
	text01();

	return 0;
}

2.4 测试结果

在这里插入图片描述

3. 感谢大家支持u ^ _ ^

下一期预告:list容器

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卫冕711

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值