queue是一种先进先出的数据结构,由两个开口。允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,同样,queue不允许由遍历行为,没有迭代器。queue也是一种container adapter。
template<class T, class Sequence = deque<T>>
class queue {
friend bool operator== __STL_NULL_TMPL_ARGS(const queue&, const queue&);
friend bool operator< __STL_NULL_TMPL_ARGS(const queue&, const queue&);
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 c的操作,完成queue的操作
bool empty()const { return c.empty(); }
size_type size()const { return c.size(); }
reference front()const { return c.front(); }
const_reference front()const { return c.front(); }
reference back()const { return c.back(); }
const_reference back()const { return c.back(); }
//deque是两头可进出,queue是末端进、前端出
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;
}
以list为底层容器的queue
list也是双向开口的数据结构,若以list作为底部结构并封闭其某些接口,一样可以形成一个queue。