【C++初阶学习】第十二弹——stack和queue的介绍和使用
创始人
2025-01-15 17:03:55
0

C语言栈:数据结构——栈(C语言版)-CSDN博客

C语言队列:数据结构——队列(C语言版)-CSDN博客

前言:

在之前学习C语言的时候,我们已经学习过栈与队列,并学习过如何使用C语言来实现栈与队列,今天,我们用C++来学习这些知识,让我们探索一下其中的新的知识点

目录

一、stack(栈)

1. 栈的概述

​编辑

2. 栈的构造函数和成员函数

3. 栈的使用示例

4. 注意事项

二、queue(队列)

1. 队列的概述

​编辑

2. 队列的构造函数和成员函数

3. 队列的使用示例

4. 注意事项

三、思考题

四、总结


一、stack(栈)

C++中的stack是一种遵循后进先出原则的容器适配器。它提供了一系列标准的操作,使得用户可以方便地实现栈这种数据结构。

1. 栈的概述

在C++标准库中,stack并不直接暴露给用户,而是作为头文件中stack模板类的声明。这个类是std::deque的封装,因此默认情况下,栈是通过双端队列实现的。但是,用户也可以指定其他的容器作为栈的底层结构,比如std::vectorstd::list

2. 栈的构造函数和成员函数

栈提供了以下构造函数和成员函数,以便用户可以轻松地创建和使用栈:

  • 空栈构造函数:创建一个空的栈。
  • 基于容器的构造函数:使用一个已存在的容器来初始化栈。
  • 拷贝构造函数:创建一个新栈,其内容是另一个栈的副本。

成员函数包括:

  • empty():检查栈是否为空。
  • size():获取栈中的元素数量。
  • top():返回栈顶元素的引用。
  • push(const T&):在栈顶插入一个元素。
  • pop():移除并返回栈顶元素。
  • emplace(const T&):在栈顶位置构造并插入一个元素。
  • swap(stack&):与另一个栈交换元素。

3. 栈的使用示例

以下是一个简单的使用C++栈的示例代码:

#include  #include   int main() {     std::stack numbers;      // 压入一些数字     numbers.push(1);     numbers.push(2);     numbers.push(3);      // 打印栈顶元素     std::cout << "栈顶元素: " << numbers.top() << std::endl;      // 弹出栈顶元素     numbers.pop();      // 检查栈是否为空     if (numbers.empty()) {         std::cout << "栈为空" << std::endl;     } else {         std::cout << "栈不为空,栈中有 " << numbers.size() << " 个元素" << std::endl;     }      return 0; }

运行结果:

4. 注意事项

虽然栈的使用看似简单,但在实际应用中仍然需要注意以下几点:

  • 确保不要超过栈的容量,否则可能会导致溢出。
  • 如果你需要频繁地访问栈中的元素,而不是仅仅进行 push 和 pop 操作,可能需要考虑使用其他数据结构。
  • 在模拟实现栈时,要注意内存管理,避免内存泄漏。

二、queue(队列)

C++中的queue是一种遵循先进先出原则的容器适配器。它提供了一系列标准的操作,使得用户可以方便地实现队列这种数据结构。

1. 队列的概述

在C++标准库中,queue并不直接暴露给用户,而是作为头文件中queue模板类的声明。这个类是std::deque的封装,因此默认情况下,队列是通过双端队列实现的。但是,用户也可以指定其他的容器作为队列的底层结构,比如std::list

2. 队列的构造函数和成员函数

队列提供了以下构造函数和成员函数,以便用户可以轻松地创建和使用队列:

  • 空队列构造函数:创建一个空的队列。
  • 基于容器的构造函数:使用一个已存在的容器来初始化队列。
  • 拷贝构造函数:创建一个新队列,其内容是另一个队列的副本。

成员函数包括:

  • empty():检查队列是否为空。
  • size():获取队列中的元素数量。
  • front():返回队列的第一个元素的引用。
  • back():返回队列的最后一个元素的引用。
  • push(const T&):在队列的尾部插入一个元素。
  • pop():移除并返回队列的第一个元素。
  • emplace(const T&):在队列的尾部位置构造并插入一个元素。
  • swap(queue&):与另一个队列交换元素。

3. 队列的使用示例

以下是一个简单的使用C++队列的示例代码:

#include  #include   int main() {     std::queue numbers;      // 插入一些数字     numbers.push(1);     numbers.push(2);     numbers.push(3);      // 打印队列的第一个元素     std::cout << "队列的第一个元素: " << numbers.front() << std::endl;      // 打印队列的最后一个元素     std::cout << "队列的最后一个元素: " << numbers.back() << std::endl;      // 弹出队列的第一个元素     numbers.pop();      // 检查队列是否为空     if (numbers.empty()) {         std::cout << "队列为空" << std::endl;     } else {         std::cout << "队列不为空,队列中有 " << numbers.size() << " 个元素" << std::endl;     }      return 0; }

运行结果:

4. 注意事项

虽然队列的使用看似简单,但在实际应用中仍然需要注意以下几点:

  • 确保不要超过队列的容量,否则可能会导致溢出。
  • 如果你需要频繁地访问队列中的元素,而不是仅仅进行 push 和 pop 操作,可能需要考虑使用其他数据结构。
  • 在模拟实现队列时,要注意内存管理,避免内存泄漏。

三、思考题

1、我们学过如何用C语言来模拟实现栈与队列,那我们如今学习了C++STL部分,请思考我们如何用C++来模拟实现栈与队列

2、上面我们讲到这两个的底层容器都是dequeue,那什么是dequeue呢?

3、我们可不可以用其他容器,如vector、list来模拟实现栈与队列?

(这些问题可以先思考一下,我们下篇再讲)

四、总结

上面就是stack和queue的介绍和使用,由于之前有过C语言的学习,所以在使用上难度不大,难的主要体现在它的底层模拟构造上,这些我们将在下一篇进行讲解

感谢各位大佬观看,创作不易,还请各位大佬一键三连!!!

相关内容

热门资讯

有玩家发现!科乐天天踢填大坑辅... 有玩家发现!科乐天天踢填大坑辅助(辅助)本来是真的有辅助脚本(真实有挂)1、完成科乐天天踢填大坑辅助...
窍要辅助!衢州都莱辅助器下载!... 窍要辅助!衢州都莱辅助器下载!详情真的有辅助插件(有挂教程)该软件可以轻松地帮助玩家将衢州都莱辅助器...
经核实!飞驰娱乐辅助软件(辅助... 经核实!飞驰娱乐辅助软件(辅助)原来存在有辅助神器(有挂规律)1)飞驰娱乐辅助软件辅助插件:进一步探...
练习辅助!情怀打七开辅助!必备... 练习辅助!情怀打七开辅助!必备是有辅助工具(果真有挂)情怀打七开辅助是不是有人用挂微扑克wpk插件教...
复盘辅助挂!多乐跑辅助(辅助)... 复盘辅助挂!多乐跑辅助(辅助)总是真的有辅助app(证实有挂)小薇(辅助器软件下载)致您一封信;亲爱...
方针辅助!雀姬无限钻石辅助!分... 方针辅助!雀姬无限钻石辅助!分享存在有辅助教程(有挂方略)1、金币登录送、破产送、升级送、活动送。详...
围绕透视问题!陕西三代二辅助器... 围绕透视问题!陕西三代二辅助器(辅助)切实真的是有辅助工具(了解有挂)陕西三代二辅助器脚本下载中分为...
学习辅助!中至赣牌圈有没有辅助... 学习辅助!中至赣牌圈有没有辅助!揭幕真的是有辅助挂(发现有挂)中至赣牌圈有没有辅助破解侠是真的助透视...
有了最新消息!边锋老友修改器(... 有了最新消息!边锋老友修改器(辅助)一贯真的有辅助脚本(有挂方略)1)边锋老友修改器辅助插件:进一步...
要领辅助!丰县14张脚本!解谜... 要领辅助!丰县14张脚本!解谜真的有辅助挂(存在有挂)丰县14张脚本辅助器是一种具有地方特色的麻将游...