2014-07-15 75 views
0

我已經閱讀了很多關於STL容器的東西(Sequence Containers,,Container adapters),但我仍然不明白他們每個人的內部形式。我想要一個最簡單的可視化STL容器

我想用圖片來支持STL中的每個集裝箱的可視化形式,(例如:什麼是容器內數據的形式),如果是可能的。

我希望我的問題清楚。

+1

漂亮的印刷容器,http://stackoverflow.com/questions/4850473/pretty-print-c -stl-containers – aaronman

+4

儘管指定了容器的行爲,但沒有以任何方式指定實現和內部工作原理和結構,因此兩個不同的庫很可能會有所不同,即使同一個庫的兩個版本可能不同。 –

回答

0

容器的內部工作是實現獨立的,如果性能(BIG-O)是正確的,前提條件和容器的後置條件和他的方法(例如:默認構造=空箱)得到滿足時,執行是標準的。

VS中的示例:
1- T的矢量 - 緩衝區(T [],T *)。正常的內部表示是3個指針,緩衝區和當前元素的開始和結束。 Ť的
2- 雙端隊列 - 實現在類似的方式矢量,但插入的元素不需要是一前一後,由於容器支承帶O之前和之後插入(1)通常,如果你創建雙端隊列它開始空作爲所有的容器,假設從後面插入一個值,在這種情況下插入位置0,如果從前插入一個值插入deque的位置容量(直到兩個索引開始和結束遇到,在這種情況下增長爲需要和複製,如向量,以及更新值的順序)。正常的內部表示是指向緩衝區開始和結束的指針,即雙端隊列的第一個和最後一個元素。 Ť
3- 列表 - 雙鏈表(與下一個,上和T節點)筆(集,多集,地圖,多重映射)的
4- asociative - 紅黑樹具有值T或對在如地圖的情況。正常內部表示左和右節點和值(用於排序)的T
5- 無序asociative(unordered_set,多重集...):哈希映射實施C++ 11新。 6- 適配器 - 底層的表示是前一容器中的一個(例如:堆是受默認與雙端隊列實現的適配器),在實例化時間可以改變基本表示根據性能大O來調整,以限制(它可能需要隨機訪問,轉發等)。

在任何版本的庫中,當任何優化建立時以及在任何其他情況下,這些細節都可以改變。例如vector的某些實現有指向開始,容量(而不是結束)和當前元素。

+0

謝謝,但是'T'和'(Big-O)'是什麼意思? –

+0

T:任何類型(模板,泛型編程),Big-O:http://en.wikipedia.org/wiki/Big_O_notation – NetVipeC

0

http://www.cs.usfca.edu/~galles/visualization/Algorithms.html

這將有助於一點點,雖然底層數據結構可以在實施將改變

+0

非常好的數據結構可視化,但不幸的是你可以在這裏找到'STL容器' ,但非常感謝。 –

+0

這是關於我能找到的最好的,儘管例如如果你看看 http://www.cplusplus.com/reference/map/map/ 你可以看到他們*通常*實現爲二叉搜索樹。 這通常意味着一個平衡的二叉搜索樹,如AVL或紅黑樹,然後你可以看看相應的條目: http://www.cs.usfca.edu/~galles/visualization/AVLtree。 HTML –