SGISTL源码探究-queue配接器

STL源码:queue queue是先进先出(FIFO)的数据结构,有两个口:允许从尾部加入元素、取得头部的元素。没有其他任何方法可以存取queue的其它元素,即queue不允许遍历行为。       SGI STL以deque作为缺省情况下的queue底部结构,queue的实现很简单,代码十分简短。      queue没有迭代器。 为什么STL queue称为容器适配器而不是容器?         阅读详情

前言

在本小节中,我们将分析queue,即队列,这种数据结构的元素符合先进先出(FIFO)的条件。它同stack一样,不算是一种容器,而是采用一种容器(SGISTL中默认是deque)作为底层结构并修改部分接口为自己所用的配接器。queue同stack一样,不支持元素的遍历操作,因此并不需要迭代器。它的所有接口都依靠底层的容器实现。

queue源码

定义部分
#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
template <class T, class Sequence = deque<T> >
#else
template <class T, class Sequence>
#endif
class queue {
  //重载操作符函数的定义
  friend bool operator== __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
  friend bool operator< __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
public:
  //类型的声明
  typedef typename Sequence::value_type value_type;
  typedef typename Sequence::size_type size_type;
  typedef typename Sequence::reference reference;
  typedef typename Sequence::const_reference const_reference;
protected:
  //定义deque容器
  Sequence c;
queue提供的接口
public:
  //判空
  bool empty() const { return c.empty(); }
  //queue的大小
  size_type size() const { return c.size(); }
  //获取队首元素
  reference front() { return c.front(); }
  const_reference front() const { return c.front(); }
  //获取队尾元素
  reference back() { return c.back(); }
  const_reference back() const { return c.back(); }
  //入队(队尾)
  void push(const value_type& x) { c.push_back(x); }
  //出队(队首)
  void pop() { c.pop_front(); }
};
重载操作符
template <class T, class Sequence>
bool operator==(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {
  return x.c == y.c;
}

template <class T, class Sequence>
bool operator<(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {
  return x.c < y.c;
}

例子

#include <iostream>
#include <queue>
//#include <list>
//#include <vector>
using namespace std;
int main()
{
  queue<int> que;
  /* 可以指定采取其他容器作为底层结构,如
   * queue<int, list<int> > que;
   * queue<int, vector<int> > que;
   */
  que.push(1);
  que.push(2);
  que.push(3);

  cout << "size " << que.size() << endl;
  cout << "队首 " << que.front() << endl;

  que.pop();

  cout << "size " << que.size() << endl;
  cout << "队首 " << que.front() << endl;

  que.pop();

  cout << "size " << que.size() << endl;
  cout << "队首 " << que.front() << endl;

  que.pop();
  if(que.empty())
    cout << "empty queue" << endl;
  return 0;
}

小结

本小节介绍了queue的实现,它和stack特别类似,也是没有自己迭代器,以及都是配接器,它们的实现都很简单,因为依靠了复杂的容器作为底部结构。
而在stl_queue.h中,还实现了priority_queue(优先级队列),它的实现也很简单,在分析它之前,我们要先对heap进行分析,它作为priority_queue的辅助,提供了满足优先级队列出队的操作等。

Open3D (C++)球旋转算法(BPA)三维建模 球旋转算法用于点云三维建模的C++代码实现。 阅读详情

相关推荐

KEPServerEX中,别名映射(Alias Mapping)数据标签重命名机制

目录核心机制应用场景配置步骤技术特性与参考内容的差异KEPServerEX中,别名映射(Alias Mapping) 是一种数据标签重命名机制,主要用于简化复杂标签路径的调用或实现跨系统兼容。其核心逻辑和功能如下:路径抽象 将设备层级结构中的完整标签路径(如 Channel1.Device1.Tag1)映射为简短别名(如 TempSensor1),降低客户端调用的复杂度。动态绑定 别名与实际标签实时关联,数据更新和读写操作通过别名直接传递到底层物理标签,无需修改客户端配置。多对一映射支持多个别名指向

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 1591

SGISTL源码阅读十八 queue(队列)

SGISTL源码阅读十八 queue(队列) 前言 和上一篇文章提到过的stack一样,queue也是一种配接器(adapter),它们的实现非常类似。 它是一种(First In First Out,FIFO)的数据结构,也没有提供遍历或指定位置访问等操作,只能从末端添加元素,顶部取出元素,所以它也没有迭代器。 深入源码 queue的定义部分 #ifndef __STL_LIMITED_DEFA...

Lyn&Xx 314

SOLIDWORKS Flow Simulation 颗粒分离器仿真:从流场分析到分离效率优化

计算流体力学(CFD)是研究流体流动、传热及相关物理现象的核心工具,其基本原理是通过数值方法求解控制流体运动的纳维-斯托克斯方程。在工程实践中,CFD的价值在于能够对复杂流动进行高保真度仿真,从而在产品设计阶段预测性能、优化结构,显著降低物理样机的试制成本和周期。颗粒分离器作为环保、化工、矿业等领域的关键设备,其设计核心在于平衡分离效率与压力损失。借助SOLIDWORKS内嵌的Flow Simulation模块,工程师可以高效地执行流体仿真,特别是对涉及离散相的颗粒运动进行轨迹追踪和效率统计。该技术方案通过

weixin_28709649的博客 325

SGI STL源码剖析——stack、queue、priority_queue

三个配接器配接器stack、queuepriority_queue 配接器 stack、queue、priority_queue这三个结构并不是真正意义上的STL容器,他们使用现有的容器作为底层结构,然后对外封装接口,从而表现出不同的特性,此即配接器。 stack、queue stack和默认使用deque作为底层容器,stack实现了栈顶访问top(),进栈和出栈的push()、pop(),deque支持队列头部front()和队尾back(),支持进队出队push()、pop() stack和deque

qq_31082639的博客 584

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2856

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1570

STL源码分析之queue配接器

前言 上一节分析了stack实现, stack是修改了deque的接口而实现的一个功能简单的结构, 本节分析的queue也是用deque为底层容器封装. queue数据都是在头部进行操作的, 之允许进行push和pop操作. queue分析 queue结构 #ifndef __STL_LIMITED_DEFAULT_TEMPLATES template &amp;amp;lt;class T, class Seq...

啦啦啦 720

【软考之软件设计师】学习笔记

interface 接口implements 实现接口(与接口配套使用)接口里要是有方法定义,子类就会实现。

云轩阁 2533

STL源码剖析-Queue

queue概述 queue是一种先进先出的数据结构,它有两个出口,queue允许新增元素、移除元素、从最低端加入元素、取得最顶端的元素。但除了最低端可以加入,最顶端可以取出,没有任何其他方法可以存取queue的其他元素,queue不允许有遍历行为。 将元素推入queue的操作称为push,将元素推出queue的操作称为pop。 queue定义完整列表 与stack类似,同样可以采用deque作为...

weixin_37549298的博客 355

【示波器专题】示波器探头的原理深入——有源探头之单端有源探头

由于接地环路的苛刻要求,更高带宽的单端有源探头就算设计了也不实用。因此单端有源探头的带宽一般在6GHz以内,更高带宽的信号测量也只能使用差分有源探头(市面上有些型号的差分探头可同时兼顾单端测试)。......

一点硬件 2146

YOLOv8改进策略【Neck】| CGA Fusion:内容引导的注意力融合模块,空间权重引导的多模态特征自适应融合

本文记录的是利用CGA Fusion 模块改进 YOLOv8 的多模态融合部分。(Content-Guided Attention Fusion)通过内容引导注意力生成空间权重,引导高低层特征的自适应融合。本文利用模块,通过内容引导注意力生成空间权重,自适应地融合两个模态的特征,在特征融合阶段实现跨模态语义对齐与噪声抑制,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。DEA-Net: Single image dehazing based on detail-enhanc

Limiiiing的博客 283

SGISTL源码探究-stack配接器

前言迄今为止,我们已经分析了vector、list、deque容器,而stack并不是一个容器,它是依据一种容器作为底层结构,然后根据自己的要求改变容器提供的接口。而在SGISTL的实现中,stack默认是以deque为底部结构,并且封装了一些接口并且stack中没有迭代器,它也并不需要,因为栈这种结构,并不支持遍历等操作,而出栈入栈这些操作,直接使用deque提供的操作,然后自己封装一下就行了。

Move_now的博客 728

把 LDB 讲透:SAP ABAP 逻辑数据库的结构、事件模型、动态选择与现代替代方案

摘要:SAP中的Logical Database(LDB)是一种将表组织成树形结构并统一生成选择屏幕的技术,通过事件驱动方式向报表程序传递数据。虽然被标记为过时,但在理解标准代码和优化性能方面仍有价值。LDB通过SE36事务码创建,其结构包含层级关系、选择屏幕和数据库程序。报表通过NODES声明和GET事件处理数据,支持动态选择以减少数据库访问。在S/4HANA和ABAP Cloud环境下,建议使用CDS View和ABAP SQL等现代方案替代LDB,以提升可测试性和架构清晰度。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

SGISTL源码探究-配接器

前言关于配接器,之前在分析序列式容器时就已经分析过queue和stack,它们也是配接器的一种,通过使用其他容器的接口然后自己加以修饰,形成另外一种容器。除了应用在容器上之外,还有关于应用在仿函数上的配接器,就如我们上一小节分析仿函数时里面的例子一样。还有一种是应用在迭代器上的配接器,等下我们会进行分析。应用于容器的配接器关于这一部分,之前已经分析过queue和stack的实现了,这里就不做赘述了。

Move_now的博客 447

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SGISTL源码探究-优先级队列

前言在上一小节中,我们分析了heap算法,其实是为了priority_queue优先级队列做准备,它也不是容器,而是配接器,因为它是通过vector来实现的,然后封装了一些vector提供的接口供自己使用而形成的。 优先级队列,即一种特殊的队列,但是它内部的元素没有按照传统队列的先进先出这种顺序排序,而是按照元素的权值进行排列,所以执行出队操作时,出队的是权值最大的元素。priority_queu

Move_now的博客 760

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《STL源码剖析》提炼总结:概览

最近在看侯捷的《STL源码剖析》,想分享几篇心得,目的是学习C++和泛型编程。从一开始本人就没打算事无巨细面面俱到,毕竟毫无重点也不是阅读源码的好习惯。所以本人打算把重点放在空间配置器,迭代器,容器以及少量算法的实现上。这四者已能体现STL的大部分设计精髓。至于仿函数和配接器,暂不做打算。 除这篇之外,这个系列暂定写6篇,分别对应空间配置器allocator,迭代器iterator,序列容器vector,红黑树的实现,关联容器map和算法。 1. 准备 C++编译器,最好是GCC SGI STL的源

syj_comeon的专栏 291

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

学习笔记----STL源码剖析

自己的学习笔记

2301_80428401的博客 684

STL源码剖析 1、STL概论与令人困惑的一些语法

STL概论 STL的诞生 软件界一直希望建立一种可重复运用的东西,即提升复用性。复用性必须建立在某种标准之上。 为了建立数据结构与算法的一套标准,并且降低其间的耦合关系以提升各自的独立性、弹性、相互合作性,STL诞生了 STL组件 ●容器(container):常用数据结构,大致分为两类,序列容器,如vector,list,deque,关联容器,如set,map。在实现上,是类模板(class template) ●迭代器(iterator):一套访问容器的接口,行为类似于指针。它为不同算法提供的相对统一的

ziggy7的博客 358

STL基础介绍

STL基础介绍一 STL介绍二 STL特性三 STL版本HP STLSGI STLSTLportP.J.Plauger STLRouge Wave STL四 STL内容 四 STL内容–六大组件 一 STL介绍 STL 历史可以追溯到 1972 年 C 语言在 UNIX 计算机上的首次使用。直到 1994 年,STL 才被正式纳入 C++ 标准中。 STL 组件主要包括容器,迭代器、算法和仿函数。...

Aaron.无剑 445

【STL源码剖析读书笔记】【第4章】序列式容器之stack和queue

一、stack 1、stack概述 stack是一种先进后出(First In LastOut,FILO)的数据结构,它只有一个出口。stack允许新增元素,移除元素、取得最顶端元素,但不允许有遍历行为。 由于stack系以底部容器完成其所有工作,而具有这种“修改某物接口,形成另一种风貌”之性质者,称为adapter(配接器)。 2、SGI STL以deque作为缺省情况下的sta

ruan875417的专栏 566

STL学习笔记(一)---概述

STL提供了六大组件,彼此之间可以用组合套用,分别是容器、算法、迭代器、适配器与空间配置器。 容器:各种数据结构,如vector、 list、 deque、 set、 map等,用来存放数据,从实现角度来看, STL容器是一种class template。 算法:各种常用的算法,如sort、 find、 copy、 for_ each,从实现的角度来看,STL算法是一种 function template。 迭代器:扮演了容器与算法之间的胶合剂,是所谓的“泛型指针”,共有五种类型,从实现角度来看,迭代器是一

qq_44272681的博客 263

STL源码剖析-chapter1

侯捷的源码剖析第一章已经看完,并做了笔记与总结。如下。 注: 1、本人目前仍在在找工作,没有经验,有出错请联系我改正 2、测试环境:g++ -v4.8.4 VS2013 3、优快云使用不熟练,上传了一份笔记文档,也附上笔记源码(以备文档无法下载) 注: 1、本章的知识点已经总结,放在了本文档的最后一部分,没有时间学习、想要直接记结论的朋友直接跳到最后即可 2、完成时间 2018-11-16 ...

qq_943588990的博客 365

sgi 之heap, priority_queue

heap只能算是算法,而priority_queue只是封装了vector,所以又称为配接器。 由于在下面的实现中需要获得iterator所指向的类型,所以又用到了stl中的类型萃取技术 cconstruct.h #ifndef C_CONSTRUCT_H #define C_CONSTRUCT_H #include #include inline void destroy(c

chivalry 751

STL源码解析之queue

#include <queue> #include <iostream> #include <algorithm> using namespace std; int main() { queue<int> iqueue; iqueue.push(1); iqueue.push(3); iqueue.push(5); iqueue.push(7); cout << iqueue.size() &l.

rabies的博客 251

STL源码剖析——queue

stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进先出"的特性。SGI STL 默认以 deque 为 stack 底部结构,没有遍历行为,没有遍历器。 queue是一种先进先出(First In First Out, FIFO)的数据结构,它在前后有两个出口,分别成为队头和队尾.queue允许在队尾追加元素和访问队尾元素, 在队头获取和移除元素,

Smile&搁浅 912

SGISTL源码探究-STL中的红黑树(上)

前言本小节将进入到SGISTL的红黑树部分。关于红黑树,是一种比较复杂的数据结构,但是并不是特别难。如果对红黑树不太了解,可以去网上查阅相关的资料,因为本文的主要目的是分析STL中的红黑树的源码,和普通的红黑树略有不同,还要复杂一些,需要有一定的基础。基本概念首先什么是二叉搜索树,二叉搜索树即符合任何一个节点的值一定大于其左子树的任何一个节点的值并且小于其右子树的任何一个节点的值(节点的值不允许重复

Move_now的博客 1806
上一篇: SGISTL源码探究-stack配接器
下一篇: SGISTL源码探究-大根堆heap
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值