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. 2-创建spring boot项目

    想要创建一个spring boot项目,最好的方法就是参照官网的例子: https://spring.io/guides/gs/maven/#scratch 创建的过程我就不再啰嗦了,官网描述非常详细 ...

  2. list.get(0)防止NPE

    package com.chuangjin.p2p; import com.chuangjin.core.utils.JsonUtils; import java.util.ArrayList; im ...

  3. Appium+Python自动化 3 -获取 app 包名和 activity

    方法一: ①手机通过USB连接电脑 ②打开手机上被测app ③在电脑上 dos命令窗口,输入命令 adb shell dumpsys window w | findstr \/ | findstr n ...

  4. 用STS构建spring boot

    操作步骤:1. 登录地址http://spring.io/tools 下载sts,spring-tool-suite-3.9.5.RELEASE-e4.8.0-win32-x86_64.zip2. 解 ...

  5. ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录

    TP+ORACLE插入数据BUG修复以及获取自增Id支持getLastInsID方法 这些天在做Api接口时候,发现用TP操作Oracle数据库,发现查询修改删除都能执行, 但一旦执行插入操作老是报错 ...

  6. 高级查询query

    详细看 https://www.kancloud.cn/ldkt/tp5_db/229042

  7. python模块:subprocess

    # subprocess - Subprocesses with accessible I/O streams # # For more information about this module, ...

  8. VS2015环境下生成和调用DLL动态链接库

    一.生成动态链接库: 1.打开VS2015->文件->新建->项目->Visual C++->Win32->Win32控制台应用程序->将名称改为dll_ge ...

  9. 实践中 XunSearch(讯搜)的使用教程步骤

    XunSearch(讯搜)的使用教程步骤 一.安装编译工具 yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql ...

  10. Notes : <Hands-on ML with Sklearn & TF> Chapter 5

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...