Stack和Queue模拟实现
小杨
在模拟实现之前,有必要介绍一下什么是容器适配器
容器适配器
适配器是一种设计模式,该种模式是将一个类的接口转换成客户希望的另一个接口。
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和queue只是对其他容器的接口进行了包装。
容器适配器:容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层。
容器适配器名称 | 特性 |
---|---|
stack | stack作为一种容器适配器来实现,其底层来来说标准容器vector、deque、list均符合这些需求,默认情况下,如果没有stack指定特定的底层容器,默认情况下使用deque |
queue | queue作为一种容器适配器来实现,其底层来来说标准容器deque和list均符合这些需求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque |
因此,要模拟实现stack和queue就只需要调用所指定容器的各个成员函数,这里stack和queue就用默认的底层deque了。
stack
stack相关接口
函数说明 | 接口说明 |
---|---|
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
检测stack是否为空 | 返回stack中元素的个数 |
top() | top() |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
stack模拟实现
namespace yang
{
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 { _c.back() };
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty; }
private:
Con _c;
};
}
queue
queue相关接口
函数说明 | 接口说明 |
---|---|
queue() | 构造空的队列 |
empty() | 检测队列是否为空,是返回true,否则返回false |
size() | 返回队列中有效元素的个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val入队列 |
pop() | 将队头元素出队列 |
queue模拟实现
namespace yang
{
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 { return _c.front(); }
size_t size()const { return _c.size(); }
bool empty()const { return _c.empty(); }
private:
Con _c;
};
};