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的辅助,提供了满足优先级队列出队的操作等。

脑电分析中的频谱特征提取 —— 从理论到实践 本文系统介绍了脑电信号(EEG)频谱特征提取方法及其应用。EEG信号通过频谱分析可分为Delta、Theta、Alpha、Beta和Gamma等具有明确生理意义的频段。文章详细讲解了功率谱密度、频带功率、相对功率、频谱熵等关键特征的计算方法,并提供了Python实现示例,包括模拟数据和真实CHB-MIT癫痫数据集的处理流程。这些频谱特征在脑机接口、情绪识别、疲劳监测和癫痫检测等领域具有重要应用价值。文章强调频谱特征结合时域和非线性特征可提升分析效果,为EEG研究提供了实用指导。 阅读详情

相关推荐

Apache Paimon-实时数据湖

Flink社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。

m0_57307642的博客 2193

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

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

Lyn&Xx 314

光伏系统选型指南:5种主流MPPT算法优缺点对比(附选型流程图)

本文深入剖析了光伏系统中五种主流MPPT算法的核心原理与性能差异。通过对比扰动观察法、电导增量法、恒定电压法、模糊逻辑控制及人工智能算法在追踪精度、响应速度、实现成本与稳定性等方面的表现,为不同应用场景(如户用、工商业及大型电站)提供了清晰的选型决策流程图和实战指南,帮助工程师优化系统效率与投资回报。

weixin_29294597的博客 106

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

Cadence Virtuoso里搞定斩波运放AC仿真:PSS+PAC保姆级设置避坑指南

然而,当工程师们尝试在Cadence Virtuoso环境中对这种特殊结构进行AC特性分析时,往往会遇到传统AC仿真方法失效的困境——这正是PSS(Periodic Steady-State)与PAC(Periodic AC)仿真组合大显身手的场景。实际项目中我们常采用"先快后精"的两步法:先用快速设置确认大体趋势,再针对关键频段进行精细仿真。例如某次设计迭代中,将harmonics从10增加到20后,发现在1MHz处的相位裕度估算误差达15°,这解释了之前样机测试时的振荡问题。

weixin_33508411的博客 451

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 567

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

23. STM32F103C8T6 ADC采集光敏电阻传感器模块光照强度实战

本文详细介绍了如何使用STM32F103C8T6的ADC模块采集光敏电阻传感器的光照强度。通过硬件接线、核心原理讲解、四步代码配置(GPIO、ADC模式、使能校准、数据滤波)以及串口验证,手把手指导完成从模拟信号到数字值的完整实战流程,并重点提示了ADC时钟分频等关键配置要点。

weixin_42300144的博客 221

STL源码剖析-Queue

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

weixin_37549298的博客 355

Synthesia技术浅析(四):自然语言处理

Synthesia 的自然语言处理(NLP)模块是其核心技术之一,涵盖了文本转语音(TTS)、情感分析以及多语言支持等多个方面。

m0_75253143的博客 1167

dToF直方图之美_deadtime死区时间

IMX459的死区时间可以在6ns,这个时间是什么级别,车载激光雷达激光器的光脉宽一般都在4ns以上,也就是这个时间贴近去SPAD的死区时间,这就导致了pile up会非常弱,不会有太多数量的光子计数堆积,加上某些SPAD设计,对TDC有一些更深入的考量,所以不需要去校正pile up算法。Sensor层面决定了pile up的复杂程度,如果一个dToF的SPAD一致性非常好,那么pile up校正可以简单到极致,也就是一句代码的事,比如IMX611,优秀到不需要后端去考虑校正pile up。

dream it possible 1436

SGISTL源码探究-stack配接器

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

Move_now的博客 728

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SGISTL源码探究-配接器

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

Move_now的博客 447

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SGISTL源码探究-优先级队列

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

Move_now的博客 760

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

syj_comeon的专栏 291

学习笔记----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、付费专栏及课程。

余额充值