容器适配器
stack和queue没有自己独立的容器,而是对其他容器接口进行包装,STL中stack和queue默认使用的是deque容器,如下图。
从stack和queue的类模板声明中可以看出,它的模板有两个参数第一个是所存储的数据类型,第二个是它们封装的容器类型,这里默认是deque容器。
queue和stack的模拟实现主要是调用deque容器实现
stack的模拟实现
namespace nzb
{
template<class T, class Con = deque<T>>
class stack
{
public:
// 入栈
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;// 调用deque容器
};
}
queue容器的模拟实现
namespace nzb
{
template<class T, class Con = deque<T>>
class queue
{
public:
// 入队列
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
{
return _c.front();
}
// 队列中元素个数
size_t size()const
{
return _c.size();
}
// 队列的判空
bool empty()const
{
return _c.empty();
}
private:
Con _c;
};
}