C++ STL容器:序列式容器-队queue,deque

摘要:

   CC++ STL(Standard Template Library,标准模板库)在C++编程中的重要性不容忽视,STL提供了一系列容器、迭代器、算法和函数对象,这些组件极大地提高了C++程序的开发效率和代码质量。

STL 容器 分为 2 大类 , 分别是“序列式容器” 和“关联式容器 ”。

  • 序列式容器:每个元素都有固定位置,取决于插入时机和地点,其底层为线性序列的数据结构,里面存储的是元素本身。
  • 关联式容器:元素位置取决于特定的排序准则,和插入顺序无关,其里面存储的是< key , value >结构的键值对,在数据检索时比序列式容器效率更高。

   本系列博文将详细介绍C++STL的各种容器的特性优缺点,以及其常用算法方法等。本文介绍的是序列式容器-队queue,deque。

(开发环境:VScode,C++17)

关键词C++STL数据存储数据类型队列queuedeque

声明:本文作者原创,转载请附上文章出处与本文链接。

文章目录

      • 摘要:
      • 正文:
        • queue
          • 常用函数:
          • 使用例子:
        • deque
          • 常用函数:
          • 使用例子:
      • 推荐阅读

正文:

queue

在C++的STL(Standard Template Library)中,queue 是一个容器适配器,它提供了队列(FIFO - First In First Out)的基本操作。队列是一种特殊的线性数据结构,只允许在一端插入元素(称为队尾或后端),而在另一端删除元素(称为队首或前端)。(有需要更深入了解数据结构队的,可看同专栏下数据结构分支)。

常用函数:
  • push():在队尾插入一个元素。
  • pop():删除队首的元素。
  • front():返回队首元素的引用。
  • back():返回队尾元素的引用。
  • empty():检查队列是否为空。
  • size():返回队列中的元素数量。
使用例子:
#include <iostream>
#include <queue>int main()
{std::queue<int> q;// 插入元素q.push(1);q.push(2);q.push(3);// 访问元素std::cout << "Front element: " << q.front() << '\n';std::cout << "Back element: " << q.back() << '\n';// 删除元素q.pop();std::cout << "Front element after pop: " << q.front() << '\n';// 检查队列是否为空和大小if (q.empty()) {std::cout << "Queue is empty.\n";}else {std::cout << "Queue is not empty. Size: " << q.size() << '\n';}return 0;
}
deque

在C++的STL(Standard Template Library)中,deque(双端队列)是一个容器,它支持在序列的开头和结尾进行元素的快速插入和删除操作。与vector不同,deque不需要在内存中连续存储元素,因此它允许在容器的两端进行高效的插入和删除操作,而不需要重新分配整个容器。

常用函数:
  • push_front():在deque的前端插入一个元素。
  • push_back():在deque的后端插入一个元素。
  • pop_front():删除deque的前端元素。
  • pop_back():删除deque的后端元素。
  • front():返回deque的前端元素的引用。
  • back():返回deque的后端元素的引用。
  • empty():检查deque是否为空。
  • size():返回deque中的元素数量。
  • begin() 和 end():返回指向deque中第一个元素和最后一个元素之后的位置的迭代器。
  • insert():在指定位置插入一个或多个元素。
  • erase():删除指定位置的元素或指定范围内的元素。
使用例子:
#include <iostream>
#include <deque>int main()
{std::deque<int> d;// 插入元素d.push_front(1);d.push_back(2);d.push_front(3);d.push_back(4);// 访问元素std::cout << "Front element: " << d.front() << '\n';std::cout << "Back element: " << d.back() << '\n';// 删除元素  d.pop_front();  d.pop_back();  std::cout << "Front element after pops: " << d.front() << '\n';// 遍历dequefor (int i : d) {std::cout << i << ' ';}std::cout << '\n';// 检查deque是否为空和大小if (d.empty()) {std::cout << "Deque is empty.\n";}else {std::cout << "Deque is not empty. Size: " << d.size() << '\n';}return 0;
}

推荐阅读

博客主页:https://blog.csdn.net/weixin_45068267
(客官逛一逛,有许多其它有趣的专栏博文)

C/C++专栏:https://blog.csdn.net/weixin_45068267/category_12268204.html
(内含其它STL容器使用及对应的数据结构实现)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle数据库中导出多个表

要在Oracle数据库中导出多个表&#xff0c;可以使用exp&#xff08;Export&#xff09;工具或expdp&#xff08;Data Pump Export&#xff09;工具。下面是两种方法的详细说明&#xff1a; 1. 使用exp工具导出多个表&#xff1a; exp是Oracle的传统导出工具&#xff0c;它允许…

一文搞懂到底什么是 AQS

日常开发中&#xff0c;我们经常使用锁或者其他同步器来控制并发&#xff0c;那么它们的基础框架是什么呢&#xff1f;如何实现的同步功能呢&#xff1f;本文将详细讲解构建锁和同步器的基础框架--AQS&#xff0c;并根据源码分析其原理。 一、什么是 AQS&#xff1f; (一) AQS…

树的笔记()

文章目录 菜单数据库设计什么结构便于使用 树结构是应用非常广泛的结构&#xff0c;甚至可以说无处不在。 电脑里的文件夹是不是树结构&#xff0c;省市区县镇乡村是不是树结构&#xff0c;菜单是不是树结构&#xff0c;军队是不是树结构&#xff0c;职位是不是树结构。。。太多…

ES module 工作原理浅谈

ES module&#xff08;ECMAScript module&#xff09;的工作过程涉及三个主要步骤&#xff1a;获取、解析和实例化。 获取步骤涉及获取所有需要的模块。当JavaScript引擎遇到import语句时&#xff0c;它首先查看module map是否已经有了一个与URL匹配的条目。如果没有&#xff…

Element中的日期时间选择器DateTimePicker和级联选择器Cascader

简述&#xff1a;在Element UI框架中&#xff0c;Cascader&#xff08;级联选择器&#xff09;和DateTimePicker&#xff08;日期时间选择器&#xff09;是两个非常实用且常用的组件&#xff0c;它们分别用于日期选择和多层级选择&#xff0c;提供了丰富的交互体验和便捷的数据…

CD4017 – 带解码输出的十进制计数器

CD4017 IC 是一个十进制计数器&#xff0c;它有 10 个输出&#xff0c;分别代表 0 到 9 的数字。计数器在&#xff08;14号引脚&#xff09;每个时钟脉冲上升时增加 1。计数器达到 9 后&#xff0c;它会在下一个时钟脉冲时从 0 重新开始。 引脚名称管脚 &#xff03;类型描述VD…

python输出日志out.log相关问题(缓存机制)

现象&#xff1a;nohup python total_test619.py > out.log 2>&1 &&#xff0c;total_test619.py功能如下&#xff0c;首先计算13的值&#xff0c;然后将该值print出来&#xff0c;之后等待5分钟&#xff0c;重新运行之前的函数&#xff0c;输出结果&#xff0c;…

Coding:小写一个debugfs

目录 事先检查 开干 撸代码 上一次整活还是在上一个月&#xff0c;写了一个简单的module并且熟悉了module的挂载查看和卸载。这一次我们自然玩一个大的&#xff0c;就是利用linux的debugfs API写一个调试文件系统。 事实上&#xff0c;底层的API全写好了&#xff0c;我们就是…

arthas命令使用

dashboard(线程、内存等环境概览) jvm&#xff08;JVM相关信息概览&#xff09; 1、RUNTIME&#xff08;系统运行环境JVM相关信息&#xff0c;运行时长等&#xff09; 2、CLASS-LOADING&#xff08;类加载信息&#xff09; 3、 COMPILATION&#xff08;编译信息&#xff09; 4…

TimerManager和Timer

在RTSP服务器中需要一个定时器来定时发送音频帧和视频帧。音频帧每隔23ms发送一帧&#xff0c;视频帧每隔40ms发一帧。 因此需要两个定时器来定时发送&#xff0c;此时我们就需要用到一个TimerManager来管理Timer。 在TimerManager类中我们需要创建定时器文件描述符&#xff…

Qt 网络编程实战

一.获取主机的网络信息 需要添加network模块 QT core gui network主要涉及的类分析 QHostInfo类 QHostInfo::localHostName() 获取本地的主机名QHostInfo::fromName(const QString &) 获取指定主机的主机信息 addresses接口 QNetworkInterface类 QNetworkInterfac…

Python——面向对象编程(类和对象)2

目录 私有属性和私有方法 01.应用场景及定义方式 02.伪私有属性和私有方法 继承 1.1继承的概念、语法和特点 1.继承的语法&#xff1a; 2.专业术语&#xff1a; 3.继承的传递性 1.2方法的重写 1.覆盖父类的方法 2.对父类方法进行扩展 关于super 1.3 父类的私有属性和…

一天搞定Echarts可视化!(1)——伪类的学习

在下面的课程当中&#xff0c;伪类是经常被使用到的一项css技术。所以这我们先进行伪类的学习来作为本次Echarts课程的前置知识。 认识“&” 在css中&#xff0c;“&”符号通常用于选择器中&#xff0c;表示选择某个元素的子元素或特定状态下的元素。 伪类 :hover—…

PID与PPID

参考文章&#xff1a;https://blog.csdn.net/oh_coding/article/details/128865229 PID (process ID)&#xff1a; 进程PID是当操作系统运行进程时系统自动为其分配的标识符&#xff0c;具有唯一性&#xff0c;且为非零整数。一个PID只会标识一个进程。一旦被发放将会是终生标识…

机械拆装-基于Unity-装配功能的实现

目录 1. 装配场景的相机控制 2. 鼠标拖拽和旋转功能的实现 2.1 鼠标拖拽 2.2 物体旋转 3. 零件与装配位置的对应关系 4. 轴向装配的准备位置 5. 装配顺序的实现 5.1 标签提示 5.2 定义一个变量记录步骤数值 1. 装配场景的相机控制 开始装配功能时&#xff0c;需要将相机调…

在大型项目中,怎样有效地组织和管理 SCSS 文件结构以提高开发效率?

在大型项目中&#xff0c;组织和管理 SCSS 文件结构是非常重要的&#xff0c;可以提高开发效率和代码的可维护性。下面是一些有效的方法&#xff1a; 使用模块化和层次化的文件结构&#xff1a;将 SCSS 文件按照模块进行组织&#xff0c;每个模块包含相关的样式规则。可以使用文…

vector与list的简单介绍

1. 标准库中的vector类的介绍&#xff1a; vector是表示大小可以变化的数组的序列容器。 就像数组一样&#xff0c;vector对其元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素&#xff0c;并且与数组中的元素一样高效。但与数…

1975react社区问答管理系统开发mysql数据库web结构node.js编程计算机网页源码

一、源码特点 react 社区问答管理系统是一套完善的完整信息管理类型系统&#xff0c;结合react.js框架和node.js后端完成本系统&#xff0c;对理解react node编程开发语言有帮助系统采用node框架&#xff08;前后端分离&#xff09;&#xff09;&#xff0c;系统具有完整的源…

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84 需强化知识点 单调栈强化 题目 42. 接雨水 注意 python 数组反序用法 result [::-1] class Solution:def trap(self, height: List[int]) -> int:# n len(height)# leftMax, rightMax [0] * n, [0] * …

golang 垃圾回收

gc不回收什么 GC 不负责回收栈中的内存栈是一块专用内存&#xff0c;专门为了函数执行而准备的&#xff0c;存储着函数中的局部变量以及调用栈栈中的数据可以通过简单的编译器指令自动清理&#xff0c;也就不需要通过 GC 来回收了 垃圾回收算法 主流的两类垃圾回收算法有两种&a…