queue概述

queue是一种先进先出的数据结构,允许新增元素、移除元素,queue只允许从底端加入元素,从顶端移除元素,不允许有遍历行为。

queue定义

以某种既有容器作为底部结构,将其接口改变,使之符合"先进先出"的特性,形成一个queue,是很容易做到的,deque是双向开口的数据结构,若以deque以底端的出口以及前端的入口,便轻易举起形成一个queue。

由于queue系以底部容器完成其所有工作,而具有这种性质,称为adapter(配接器),因此,STL stack往往不被归类为container(容器),而被归类为container adapter。

template <class T,class Sequence=deque<T> >
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:
Sequence c;//底层容器
public:
//以下利用Sequence(也就是deque)实现queue
bool empty() const{return c.empty();}
size_type size() const{return c.size();}
reference front() const{return c.font();}
const_reference front() const{return c.font();}
reference back() const{return c.back();}
const_reference back() const{return c.back();} void push(const value_type&){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;
}

queue没有迭代器

queue是先进先出的数据结构,不允许遍历,所以queue不提供迭代器。

以list作为queue底层容器

除了deque之外,list也是双向开口的数据结构。上述queue源码中使用的底层容器的函数有empty、size、back、push_back、pop_back,list也都具备,因此,若以list为底部结构并封闭其头端开口,一样能够形成一个stack,示范如下:

#include<bits/stdc++.h>
using namespace std; int main(){
queue<int,list<int> > myqueue;
myqueue.push();
myqueue.push();
myqueue.push();
myqueue.push();
cout<<myqueue.size()<<endl; //
cout<<myqueue.front()<<endl; //1;
myqueue.pop(); cout<<myqueue.front()<<endl; //
myqueue.pop(); cout<<myqueue.front()<<endl; //
myqueue.pop(); cout<<myqueue.front()<<endl; //
cout<<myqueue.size()<<endl; //
return ;
}

queue源码的更多相关文章

  1. jQuery.queue源码分析

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong ) 队列是一种特殊的线性表,它的特殊之处在于他只允许在头部进行删除,在尾部进行插入.常用来表示先进先出的操作(FI ...

  2. JDK容器类List,Set,Queue源码解读

    List,Set,Queue都是继承Collection接口的单列集合接口.List常用的实现主要有ArrayList,LinkedList,List中的数据是有序可重复的.Set常用的实现主要是Ha ...

  3. java读源码 之 queue源码分析(PriorityQueue,附图)

    今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员--PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所耳闻吧,什么?没..没听过?emmm... ...

  4. 源码之Queue

    看源码可以把python看得更透,更懂,想必也是开发人员的必经之路. 现在有个任务,写个线程池.使用Queue就能写一个最简单的,下面就来学学Queue源码. 源码之Queue: class Queu ...

  5. 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

    一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...

  6. 【Java源码】集合类-队列Queue

    一.描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器.可以模拟生活中依次排队这种场景. 下面是集合体系继承树: 二.Queue Queue和List一样都是Collection的子 ...

  7. 源码解析Synchronous Queue 这种特立独行的队列

    摘要:Synchronous Queue 是一种特立独行的队列,其本身是没有容量的,比如调用者放一个数据到队列中,调用者是不能够立马返回的,调用者必须等待别人把我放进去的数据消费掉了,才能够返回. 本 ...

  8. 【JUC】JDK1.8源码分析之CopyOnWriteArrayList(六)

    一.前言 由于Deque与Queue有很大的相似性,Deque为双端队列,队列头部和尾部都可以进行入队列和出队列的操作,所以不再介绍Deque,感兴趣的读者可以自行阅读源码,相信偶了Queue源码的分 ...

  9. 并发-CopyOnWrite源码分析

    CopyOnWrite源码分析 参考: https://blog.csdn.net/linsongbin1/article/details/54581787 http://ifeve.com/java ...

随机推荐

  1. 笔记javascript

    // var demo1=12;// alert('点击确定按钮看结果'+demo1);// for(var i = 0; i<10;i++)// {//     document.write( ...

  2. Appium+Python自动化 2 定位元素方式

    1.找到 Android SDK安装路径tools 下面的 uiautomatorviewer.bat,如下截图 2.点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分 ...

  3. pyc文件

    1.pyc文件 是python预编译后的字节码文件,并不是机器码.2.PyCodeObject 是Python编译器真正编译成的结果: 当python程序运行时,编译的结果是保存在PyCodeObje ...

  4. JavaScript变量声明var,let.const

    var声明变量的作用域限制在其声明位置的上下文中 var x = 0; // x是全局变量,并且赋值为0. console.log(typeof z); // undefined,因为z还不存在. f ...

  5. Python——我所学习的turtle函数库

    1基础概念 1.1 画布(canvas) 画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置. 常用的画布方法有两个:screensize()和setup(). (1)tur ...

  6. go mysql insert变量到数据库

    result, err1 := db.Exec("insert ignore into dish(name,calorie,confidence) values('"+str1+& ...

  7. ProcessingElement.h

    processing element模块 #ifndef __NOXIMPROCESSINGELEMENT_H__ #define __NOXIMPROCESSINGELEMENT_H__ #incl ...

  8. 信号量(Semaphore)

    在python的多线程体系中,一共有4种锁: 同步锁(互斥锁):Lock: 递归锁:RLock: 信号量:Semaphore: 同步条件锁:Condition. 信号量(semaphore)是一种可以 ...

  9. 简述Oracle IOT(Index Organized Table)

    转:http://blog.itpub.net/17203031/viewspace-744477 对关系型数据库产品(RDBMS)而言,一个重要特性就是:数据信息都被组织为二维数据表,信息的表达可以 ...

  10. U-Boot Makefile分析(2) config.mk分析

    浏览一下U-Boot各个子目录下的Makefile可以看到,几乎他们都会包含$(TOPDIR)/config.mk,那么这个文件进行了什么操作呢?简单概括:读入include/config.mk.in ...