【C++】stack、queue和deque的使用

2024-06-12 17:36
文章标签 c++ 使用 stack queue deque

本文主要是介绍【C++】stack、queue和deque的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫

目录

导读

一、stack

1. stack介绍

2. stack使用

二、queue

1. queue介绍

2. queue使用

三、deque

1. deque介绍

2. deque的迭代器

3. deque使用

四、三者关系

1. STL标准库中stack和queue的底层结构


 

导读

今天我们主要来了解stack、queue、和deque的一些基本使用,下次再来说下他们的模拟实现。

其中栈和队列我们在数据结构部分就已经用C来实现了一遍,大家有兴趣的可以点进主页。

一、stack

1. stack介绍

Stack,中文翻译为"栈",是一种数据结构,在计算机科学中经常被使用。Stack的特点是先进后出(LIFO,Last In First Out),它只允许在一端进行插入和删除操作,这一端被称为栈顶。

具体的流程大姐可以点进这个链接:http://t.csdnimg.cn/OxrHQ

2. stack使用

  • 使用stack类时,需要包含<stack>头文件。
  • 栈中存储的元素类型可以是任意的,不仅限于整数类型。
  • 栈的大小没有限制,可以根据需要动态调整。
  • 在使用top()或pop()操作时,要确保栈不为空,否则会导致未定义行为。
#include <iostream>
using namespqce std;
#include <stack>
int main()
{//定义栈对象:stack<int> st;// 创建一个空的整数类型栈//入栈操作:st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout << st.top() << " ";//获取栈顶元素//出栈st.pop();}cout << endl;return 0;
}

二、queue

1. queue介绍

queue(队列)是一种先进先出(FIFO,First-In-First-Out)的数据结构,其中元素按照加入队列的顺序进行处理。

队列有两个基本操作:入队(enqueue)和出队(dequeue),分别指元素加入队列和从队列中移除元素。

除此之外,队列还提供了一些其他的操作,如获取队首元素、判断队列是否为空等。

具体的图解点击:http://t.csdnimg.cn/OxrHQ

2. queue使用

  • 使用queue类时,需要包含<queue>头文件。
  • 队列中存储的元素类型可以是任意的,不仅限于整数类型。
  • 队列的大小没有限制,可以根据需要动态调整。
  • 在使用front()、pop()操作时,要确保队列不为空,否则会导致未定义行为。
#include <iostream>
using namespace std;
#include <queue>
int main()
{//定义队列对象:queue<int> q;//创建一个空的整数类型队列//入队操作q.push(1);q.push(2);cout << q.front() << " ";//获取队首元素q.pop();// 出队q.push(3);q.push(4);while (!q.empty())//判空{cout << q.front() << " ";q.pop();}cout << endl;return 0;
}

三、deque

1. deque介绍

deque(双端队列)是一种能够在两端进行操作的数据结构。

deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组。

它既可以在前端进行插入和删除操作,也可以在后端进行插入和删除操作。

deque的特点包括:

  1. 可以在队列的任一端进行插入和删除操作,也就是说可以在队列的前端(头部)和后端(尾部)进行操作。
  2. deque的大小可以动态调整,可以根据需要增加或减少元素。
  3. deque中的元素在内存中是连续存储的,这使得访问元素的速度比较快。
  4. deque不需要预留内存空间,可以根据需要动态分配内存。

deque与vector相似,但deque具有更高的插入和删除元素的性能,因为它允许在队列的两端进行操作。但与之相比,deque的随机访问性能略低,因为deque中的元素并不是像vector那样在内存中是连续存储的。

2. deque的迭代器

双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂。

int main()
{deque<int> mydeque = { 1, 2, 3, 4, 5 };for (deque<int>::iterator it = mydeque.begin(); it != mydeque.end(); ++it) {cout << *it << " ";}cout << endl;return 0;
}

3. deque使用

#include <iostream>
using namespace std;
#include <deque>int main()
{deque<int> myDeque; // 创建一个整数类型的双端队列// 在前端插入元素myDeque.push_front(3);myDeque.push_front(2);myDeque.push_front(1);// 在后端插入元素myDeque.push_back(4);myDeque.push_back(5);myDeque.push_back(6);// 打印双端队列的元素cout << "双端队列元素: ";for (auto element : myDeque) {cout << element << " ";}cout << endl;// 删除前端元素myDeque.pop_front();// 删除后端元素myDeque.pop_back();// 获取前端元素int frontElement = myDeque.front();cout << "前端元素: " << frontElement << endl;// 获取后端元素int backElement = myDeque.back();cout << "后端元素: " << backElement << endl;// 获取双端队列大小int dequeSize = myDeque.size();cout << "双端队列大小: " << dequeSize << endl;// 判断双端队列是否为空bool isEmpty = myDeque.empty();cout << "是否为空? " << (isEmpty ? "Yes" : "No") << endl;return 0;
}

四、三者关系

1. STL标准库中stack和queue的底层结构

虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配 器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。

这篇关于【C++】stack、queue和deque的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054878

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2