FILO-Stack
Stack 就是我们说的STL的栈,是一种配接器(adapter)
因为在数据结构中我们有深入的研究过栈的实现,这里就直接上源代码了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
template <class T, class Sequence = deque<T>> class stack { friend bool operator == __STL_NULL_TMPL_ARGS (const stack&, const stack&); friend bool operator < __STL_NULL_TMPL_ARGS (const stack&, const stack&); public: typedef typename Sequence::value_type value_type; typedef typename Sequence::size_type size_type; typedef typename Sequence::reference_type reference_type; typedef typename Sequence::const_reference const_reference; protected: Sequence c; //底层容器 public: //以下都是基于底层容器的实现 bool empty() const { return c.empty(); } size_type size() const { return c.size(); } reference top() { return c.back(); } const_reference top() { return c.back(); } void push(const value_type& x) { c.push_back(x); } void pop() { c.pop_back(); } }; template <class T, class Sequence> bool operator==(const stack<T,Sequence>& x, const stack<T,Sequence>& y) { return x.c == y.c; } template <class T, class Sequence> bool operator<(const stack<T,Sequence>& x, const stack<T,Sequence>& y) { return x.c == y.c; } |
然后要注意的是:
Stack没有迭代器,因为stack的所有元素都是 先进后出的条件,只有顶端元素才能被外界访问,所以不提供迭代器。
还有 除了Deque可以作为底层容器之外,List也可以作为底层容器…Vector嘛…也行
这里展示以List作为底层容器的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <stack> #include <list> #include <iostream> #include <algorithm> using namespace std; int main() { stack <int, list<int>> istack; cout << istack.size() << endl; istack.push(1); istack.push(3); istack.push(5); istack.push(7); cout << istack.size() << endl; cout << istack.top() << endl; istack.pop(); cout << istack.top() << endl; istack.pop(); cout << istack.top() << endl; istack.pop(); cout << istack.top() << endl; cout << istack.size() << endl; } |
大致就是这样…并没有什么难点。
如果有,去看C语言版数据结构…
【STL】Stack