queue源碼

queue概述前端

queue是一種先進先出的數據結構,容許新增元素、移除元素,queue只容許從底端加入元素,從頂端移除元素,不容許有遍歷行爲。c++

queue定義數據結構

以某種既有容器做爲底部結構,將其接口改變,使之符合"先進先出"的特性,造成一個queue,是很容易作到的,deque是雙向開口的數據結構,若以deque以底端的出口以及前端的入口,便輕易舉起造成一個queue。函數

因爲queue系以底部容器完成其全部工做,而具備這種性質,稱爲adapter(配接器),所以,STL stack每每不被歸類爲container(容器),而被歸類爲container adapter。spa

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沒有迭代器code

queue是先進先出的數據結構,不容許遍歷,因此queue不提供迭代器。blog

以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(1); myqueue.push(3); myqueue.push(5); myqueue.push(7); cout<<myqueue.size()<<endl; //4
    cout<<myqueue.front()<<endl; //1;
    myqueue.pop(); cout<<myqueue.front()<<endl; //3
    myqueue.pop(); cout<<myqueue.front()<<endl; //5
    myqueue.pop(); cout<<myqueue.front()<<endl; //7
    cout<<myqueue.size()<<endl; //1
    return 0; }
相關文章
相關標籤/搜索