我们通过查库可知 stack
与 queue
的模板参数。
其中模板参数 Container 我们在上一篇文章已经介绍,具体可见:STL详解 —— stack和queue的介绍及使用
stack模拟
我们利用容器适配器来模拟实现 stack
,我们可以使用一个已有的容器作为底层存储结构,并在其基础上封装一个类,实现栈的操作。这样就可以通过复用底层容器的成员函数来实现栈的功能。
具体要实现的成员函数包括:
成员函数 | 函数作用 |
---|---|
push | 压栈 |
pop | 出栈 |
top | 取栈顶元素 |
size | 获取栈里面的元素个数 |
empty | 判空 |
这里以vector为例来演示:
namespace qq
{
template<class T, class Container = std::deque<T>>
class stack
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_back();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
const T& top()
{
return _con.back();
}
private:
Container _con;
};
}
queue模拟
同理,我们再进行 queue
的模拟
以 deque
来模拟。
成员函数 | 函数作用 |
---|---|
push | 入队列 |
pop | 出队列 |
front | 获取对头元素 |
back | 获取队尾元素 |
size | 获取队列元素个数 |
empty | 判空 |
namespace qq
{
template<class T, class Container = std::deque<T>>
class queue
{
public:
void push(const T& x)
{
_con.push_back(x);
}
void pop()
{
_con.pop_front();
}
size_t size()
{
return _con.size();
}
bool empty()
{
return _con.empty();
}
const T& front()
{
return _con.front();
}
const T& back()
{
return _con.back();
}
private:
Container _con;
};
}