queue源码

时间:2023-03-09 02:11:42
queue源码

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 ;
}