使用双端队列deque模拟栈stack
今天的内容有点简单~
众所周知🤓👆,栈作为一个先进后出的结构,在计算机的世界确实能够发挥很多的作用。
而我们C++祖师爷本贾尼是第一批把这个结构作为实实在在的容器做进std的人~

那为了更好的了解stack的玩法,我们使用vector和list的结合体----deque双端队列来深入探索stack的前因后果。
首先我们需要明确需要模拟实现stack哪些接口。按照实际需求,我们只需要实现:
● push() 入栈
● pop() 出栈
● top() 获取栈顶元素
● empty() 判空
好,知道了目标我们接下来只用看下结构了。结构挑的好,简介代码少不了~😎👆
那我们来看看,究竟这个结构怎么写会让模拟stack变得如此简单呢?
template<class T,class Container = deque<T>>
class stack {
public:
void push(const T& x){_con.push_back(x);}
void pop() {_con.pop_back();}
const T& top() {return _con.back();}
bool empty() {return _con.empty();}
private:
Container _con;
写完了。
是的,你没听错,写完了!!
这里最最精妙的玩法就是使用了函数模板来重构了一下deque,之后在对应的接口返回一下封装好的deque接口我们就能很简单的模拟出来了~
如果不信的话我们来使用以下代码测试一下:
void test_stack()
{
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
st.push(5);
while (!st.empty())//遍历栈和队列采用不为空的while循环 然后输出栈顶元素后删除即可
{
cout << st.top() << " ";
st.pop();
}
cout << endl;
}
测试之后结果都是对的,
哇,发现真的很香😊✌️~~(完)

1040

被折叠的 条评论
为什么被折叠?



