文章目录
1. 写在前面
容器适配器:具有”修改某物接口,形成另一种风貌“之性质者,称为adapter,而又以容器作为其底层,故称之为container adapter
- 容器适配器有3种,分别是stack、queue以及priority_queue,而priority_queue又以heap作为其操作实现,所以等下一节解析heap时放于其中解析,在这里只分析stack以及queue
2. stack–queue
2.1 satck概述
2.1.1 stack实现
- 首先,stack即栈,是一种先进后出的数据结构,只有一个出口,只能从顶端对元素进行操作,在数据结构课程中有所了解;而STL中将stack作为一种配接器,以deque或list作为其底层容器实现其功能
- 源代码如下:
template <class T, class Sequence = deque<T>> //此处deque也可更换成list
class stack {
//两个友元函数,实现两个stack的比较操作
friend bool operator==__STL_NULL_TMPL_ARGS (const stack&, const stack&);
friend bool oeprator<__STL_NULL_TMPL_ARGS (const stack&, const stack&);
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的操作完成stack的操作
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference top() { rerturn c.back(); }
const_reference top() const { return c.back(); }
//stack后进者先出
void push(const value_type& x) { c.push_back(x); }
void pop() { return c.pop_back(); }
};
template <class T, class Sequence>
bool operator== (const stack<T, Sequence>& x, const stack<T, Sequence>& y)
{
return x.c == y.c;
}
template <class T, class Sequence>
bool operator== (const stack<T, Sequence>& x, const stack<T, Sequence>& y)
{
return x.c < y.c;
}
2.1.2 stack迭代器
- stack所有元素都必须符合”先进后出“的条件,只有顶端元素才能被访问,stack不提供走访功能,所以没有迭代器
2.2 queue概述
2.2.1 queue实现
- queue即队列,是一种先进先出的数据结构,有两个出口,只能从最底端或最顶端对元素进行操作;在STL中将queue作为一种配接器,以deque或list作为其底层容器实现其功能
- 源代码如下(与stack基本类似):
template <class T, class Sequence = deque<T>> //此处deque也可更换成list
class queue {
//两个友元函数,实现两个stack的比较操作
friend bool operator==__STL_NULL_TMPL_ARGS (const queue&, const queue&);
friend bool oeprator<__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的操作完成queue的操作
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front() { rerturn c.front(); }
const_reference front() const { return c.front(); }
reference back() { rerturn c.back(); }
const_reference back() const { return c.back(); }
//queue先进者先出
void push(const value_type& x) { c.push_back(x); }
void pop() { return 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;
}
2.2.2 queue迭代器
- queue所有元素都必须符合”先进先出“的条件,只有顶端元素才能被访问,queue不提供走访功能,所以没有迭代器