具有修改某物接口,形成另一種風貌之性質者,稱為適配器。stack便是以deque為底層容器,適當封閉一些功能而形成一種具有“先進后出”特性,并不允許遍歷行為的容器適配器。因為不能遍歷容器,故stack沒有迭代器。
源碼如下:
~~~
template <class T, class Sequence = deque<T> >
class stack {
....
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() const { return c.back(); }
void push(const value_type& x) { c.push_back(x); } // deque末端進
void pop() { c.pop_back(); } // deque末端出
};
~~~
從代碼可以看出,stack的所有操作都是轉調用了底層容器deque的相應操作,所以stack的定義非常簡單,這里就不做多的分析了。
stack默認使用deque作為底層容器,但定義stack時可以自己定義底層容器,如:
stack<int,?list<int>?> istack;
由于list也具有empty、size、back、push_back、pop_back等功能,所以用list作為底層容器是合法的。
參考:
《STL源碼剖析》 P167.
- 前言
- 順序容器 — heap
- 關聯容器 — 紅黑樹
- 關聯容器 — set
- 關聯容器 — map
- 關聯容器 — hashtable
- 關聯容器 — hash_set
- 關聯容器 — hash_map
- 算法 — copy
- 順序容器 — stack
- 順序容器 — queue
- 順序容器 — priority_queue
- 順序容器 — slist
- construct()和destroy()
- 空間配置器
- 函數適配器
- 迭代器以及“特性萃取機”iterator_traits
- 算法 — partial_sort
- 算法 — sort
- 仿函數
- 適配器(adapters)
- C++簡易vector
- C++簡易list
- STL算法實現
- C++模板Queue