使用双端队列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;}
测试之后结果都是对的,
哇,发现真的很香😊✌️~~(完)