目录
(三)为什么选择deque作为stack和queue的底层默认容器
一、stack介绍及使用
(一)stack介绍
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口,而stack容器适配器相当于借用deque(双端队列)的底层结构来实现stack结构。
(二)stack使用
template<class T, class Con = deque<T>>//类模板定义
class stack
{
public:
stack()//不需要编写构造函数,该容器适配器已经实现过了
{}
//入栈
void push(const T& x)
{
_c.push_back(x);
}
//出栈
void pop()
{
_c.pop_back();
}
//获取栈顶元素
T& top()
{
return _c.back();
}
const T& top()const
{
return _c.back();
}
//获取有效数大小
size_t size()const
{
return _c.size();
}
//判断是否为空
bool empty()const
{
return _c.empty();
}
private:
//容器定义
Con _c;
};
从栈的接口中可以看出,栈实际是一种特殊的vector,因此也可以使用vector完全可以模拟实现stack。
二、queue的介绍和使用
(一)queue的介绍
队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端
提取元素,队列同样作为容器适配器实现。
(二)queue的使用
template<class T, class Con = deque<T>>
class queue
{
public:
//构造函数不需要自己实现
queue()
{}
//入队列
void push(const T& x)
{
_c.push_back(x);
}
//出队列
void pop()
{
_c.pop_front();
}
//队尾
T& back()
{
return _c.back();
}
const T& back()const
{
return _c.back();
}
//队头
T& front()
{
return _c.front();
}
const T& front()const