STL-stack容器和queue容器

news/2025/2/23 4:32:34/

stack概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

与queue相似,stack也是一个适配器类,它给底层vector提供了典型的栈接口。stack比vector的限制多,不允许随机访问栈元素,不能够允许遍历栈,只是把使用限制在栈的基本操作。既可以将压入栈顶,从栈顶弹出元素、查看栈顶的数值、检查元素数目和测试是否为空。栈为先进先出。
 

 stack 常用接口:

构造函数:

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

赋值操作:

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

数据存取:

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

大小操作:

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

示例:

#include<iostream>
using namespace std;
#include <stack>//栈容器常用接口
void test01()
{//创建栈容器 栈容器必须符合先进后出stack<int> s;//向栈中添加元素,叫做 压栈 入栈s.push(1);s.push(2);s.push(3);cout << "栈的大小为:" << s.size() << endl;while (!s.empty())//如果stack中还有元素,那么就继续输出栈顶元素 {//输出栈顶元素cout << "栈顶元素为: " << s.top() << endl;//弹出栈顶元素s.pop();}cout << "栈的大小为:" << s.size() << endl;}int main() {test01();system("pause");return 0;
}

运行结果:

queue概念:queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据

queue类是一个适配器类。queue模板让底层类(默认为deque)展示为典型的队列接口。queue的限制比deque更多。不仅不支持随机访问,甚至不允许遍历队列。他只能将元素添加到队尾、从队首删除元素、查看队尾和队首的数值、检查元素数目和测试队列是否为空。(这就是阉割版的deque,但是用在纯队列中效率更高)
 

queue常用接口:

 构造函数:

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

赋值操作:

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

数据存取:

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

大小操作:

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

示例:

#include<iostream>
using namespace std;
#include<queue>
#include<string>
class Person
{
public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};void test01() {//创建队列queue<Person> q;//准备数据Person p1("唐僧", 30);Person p2("孙悟空", 1000);Person p3("猪八戒", 900);Person p4("沙僧", 800);//向队列中添加元素  入队操作q.push(p1);q.push(p2);q.push(p3);q.push(p4);//队列不提供迭代器,更不支持随机访问	while (!q.empty()) {//输出队头元素cout << "队头元素-- 姓名: " << q.front().m_Name<< " 年龄: " << q.front().m_Age << endl;cout << "队尾元素-- 姓名: " << q.back().m_Name<< " 年龄: " << q.back().m_Age << endl;cout << endl;//弹出队头元素q.pop();}cout << "队列大小为:" << q.size() << endl;
}int main() {test01();system("pause");return 0;
}

运行结果:

stack和queue的使用场景

借助栈的先进后出的特性,可以简单实现一个逆序输出的功能,首先把所有元素依次入栈,然后把所有元素出栈并输出

包括编译器的在对输入的语法进行分析的时候,例如"()"、"{}"、"[]"这些成对出现的符号,借助栈的特性,凡是遇到括号的前半部分,即把这个元素入栈,凡是遇到括号的后半部分就比对栈顶元素是否该元素相匹配,如果匹配,则前半部分出栈,否则就是匹配出错

包括函数调用和递归的时候,每调用一个函数,底层都会进行入栈操作,出栈则返回函数的返回值

生活中的例子,可以把乒乓球盒比喻成一个堆栈,球一个一个放进去(入栈),最先放进去的要等其后面的全部拿出来后才能出来(出栈),这种就是典型的先进后出模型

队列

当我们需要按照一定的顺序来处理数据,而该数据的数据量在不断地变化的时候,则需要队列来帮助解题

队列的使用广泛应用在广度优先搜索中,例如层次遍历一个二叉树的节点值

生活中的例子,排队买票,排在队头的永远先处理,后面的必须等到前面的全部处理完毕再进行处理,这也是典型的先进先出模型


http://www.ppmy.cn/news/66932.html

相关文章

cleanmymac在哪下载?中文官网安装教程

CleanMyMac是一个系统清理工具&#xff0c;删除系统缓存文件 , 多余的应用程序语言包 , PowerPc软件运行库等。 是个给你的硬盘瘦身的好工具。 系统&#xff1a;macOS 10.14&#xff08;在10.15以及Big Sur中的安装激活教程相同&#xff09;登录CleanMyMac X下载页面&#xff0…

字节给的比我想的还多?网友看完:打死也要去

曾经的互联网是PC的时代&#xff0c;随着智能手机的普及&#xff0c;移动互联网开始飞速崛起。而字节跳动抓住了这波机遇&#xff0c;2015年&#xff0c;字节跳动全面加码短视频&#xff0c;从那以后&#xff0c;抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节…

1-Zookeeper简介

1-Zookeeper简介 ①官网 官网 https://zookeeper.apache.org/中文网站 https://zookeeper.net.cn/ ②简介 ZooKeeper 是分布式应用程序的分布式开源协调服务。它公开了一组简单的原语&#xff0c;分布式应用程序可以基于这些原语实现更高级别的同步、配置维护、组和命名服务…

Unity 中常见的开发设计模式

以下是 Unity 中常见的开发设计模式的详细介绍&#xff1a; 单例模式 介绍 单例模式是一种常见的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点来访问该实例。 方法 单例模式的实现方法是将类的构造函数私有化&#xff0c;这样就不能通过 ne…

学好C++的五大关键知识点,我想分享学习C++的经验

我其实一直都自称为一个程序员&#xff0c;包括现在我也会去写一些程序&#xff0c;虽然说写的还比较少了最近。最早其实是在初中的时候开始学习编程&#xff0c;做竞赛出来。最开始也将近有20年了啊。我从初中开始学习编程&#xff0c;然后做编程竞赛&#xff0c;逐渐开始喜欢…

眼球追踪、HDR、VST,从代码挖掘Valve下一代VR头显

擅长爆料、挖掘线索的Brad Lynch&#xff0c;此前发布了Quest Pro等设备的线索文章引发关注。​近期&#xff0c;又公布一系列与“Valve Deckard”VR头显相关消息&#xff0c;比如支持眼球追踪、HDR、VST透视、Wi-Fi网络等等。在SteamVR 1.26.1测试版更新、Steam用户端、Gamesc…

软考 软件设计师数据结构二笔记

查找基本概念 顺序查找 折半查找&#xff08;二分查找顺序存储 &#xff09; 查找一个数据先给他折中&#xff0c;看看要查找的是不是大于中间值如果大于前面的就不用查找了 l和r指向对应下标 二分查找补充 上图描述如何构造这般查找判定树&#xff0c;一般都是下取整 …

elasticsearch结构化查询(一)

在上一篇中我们介绍了DSL相关的知识&#xff0c;接下来我们将会学习elasticsearch的结构化查询&#xff0c;同时也实践一下上一篇的DSL的查询用法 什么是结构化搜索? 从《Elasticsearch权威指南》上摘取部分解释如下: 结构化搜索是指查询包含内部结构的数据。日期&#xff0…