STL笔记之queue

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。


猜你喜欢

转载自blog.csdn.net/s_hit/article/details/79519064
今日推荐