Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】
创始人
2024-05-21 04:03:19
0

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

文章目录

  • 1. stack容器——栈
    • 1.1 基本概念
      • 1.1.1 特点
        • ① 先进后出
        • ② 不能遍历
        • ③ 可以为空,返回元素个数
      • 1.1.2 图解
    • 1.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 1.3 代码展示
    • 1.4 测试结果
  • 2. queue容器——队列
  • 2.1 基本概念
      • 2.1.1 特点
        • ① 先进先出
      • ② 不能遍历
      • ③ 可以为空,返回元素个数
      • 2.1.2 图解
    • 2.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 2.3 代码展示
    • 2.4 测试结果
  • 3. 感谢大家支持u ^ _ ^

1. stack容器——栈

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

1.1 基本概念

1.1.1 特点

① 先进后出

  • stack是一种先进后出的数据结构,它只有一个出口

② 不能遍历

  • 栈容器由于只有顶部元素才能被访问,要想访问栈中其他元素,则需要先把底部元素拿走,但一旦把底部元素拿走,栈的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以栈不能进行遍历操作

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

  • 栈容器可以为空【通过empty函数()接口】
  • 可以通过入栈时来记录元素的个数【通过size()函数接口】

1.1.2 图解

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

1.2 函数原型

记得头文件#include

a. 构造函数

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

b. 赋值操作

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

c. 数据存取

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

d. 大小操作

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

1.3 代码展示

#include
#include
#include
using namespace std;void text01() {//特点:符合先进后出的数据结构stack 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

a. 构造函数

  • queue 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
#include
#include
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 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容器

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...