/*
*思路:
-
- stack和queue的模拟实现思路一样,都是通过容器适配而成
-
- 容器的模板参数Con给出容器deque作为底层的默认容器(使用的过程中也可以自己指定容器)
-
- stack和queue的方式实现在底层都是转为调用适配容器,只要容器能够满足所有的转调用操作,都可以充当适配 容器
-
- 由于stack和queue是通过其他容器适配而成,所以stack和queue称为容器适配器
*/
namespace bit
{
#include<deque>
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;
};
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;
};
};