1. 程式人生 > >STL原始碼分析之queue配接器

STL原始碼分析之queue配接器

前言

上一節分析了stack實現, stack是修改了deque的介面而實現的一個功能簡單的結構, 本節分析的queue也是用deque為底層容器封裝.

queue資料都是在頭部進行操作的, 之允許進行push和pop操作.

queue分析

queue結構

#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
template <class T, class Sequence = deque<T> >
#else
template <class T, class Sequence>
#endif
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: bool empty() const { return c.empty(); } size_type size() const { return c.size(); } // 呼叫deque的front函式 reference front() { return c.front(); } const_reference front
() const { return c.front(); } reference back() { return c.back(); } const_reference back() const { return c.back(); } // 只封裝push_back, pop_front函式 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;
}

queue例項

int main()
{
	std::queue<int> qu;
	qu.push(1);
	qu.push(2);
	qu.push(3);
	qu.size();
	while(!qu.empty())
	{
		std::cout << qu.front()  << " ";	// 1 2 3 
		qu.pop();
	}
	exit(0);
}

總結

queuestack都是使用底層介面封裝的結構, 他們是被稱為配接器而不是容器.