2013-05-03 67 views
3

我正在尋找各種C++ 11標準容器和容器適配器(可選地還包括boost/Qt)的重要屬性的綜合摘要/參考,但是索引的屬性爲,而不是通常的每個容器文檔(更多在下面)。C++ 11容器/適配器屬性的實用總結/參考?

我心目中的屬性包括,從我的頭頂:

  • 插入功能(前/後/任意)。
  • 去除功能(前/後/任意)。
  • 接入能力(前/後/單/雙向遍歷/隨機接入)。
  • 上述操作的複雜性和迭代器失效規則。
  • 唯一性?有序?聯想?連續存儲?提前預訂?

我可能已經忘記了一些在這種情況下不要猶豫評論/編輯。

目標是使用該文檔作爲輔助選擇合適的容器/適配器以適應正確的工作,而不必每次都反覆瀏覽各種單獨的文檔(我有可怕的內存)。

理想情況下,它應該通過屬性和容器類型(如表格式)進行索引,以便做出決策以及快速參考基本約束。但實際上,每個屬性索引對我來說都是最重要的,因爲這是在文檔中搜索最痛苦的。

如果沒有人制作過這樣的文件,我會感到非常驚訝,但是我的搜索功能讓我失望了。

注意:我不是要求你總結所有這些信息(如果我真的必須這樣做,我會在這裏發佈結果),但只有當你碰巧遇到知道符合這些要求的現有文檔。有些東西like this是一個好的開始,但正如你所看到的,它仍然缺乏許多我想要的信息,因爲它僅限於成員函數。

感謝您的關注。

+0

令人懷疑有這樣的參考。也許你可以爲cppreference.com創建一個? – 2013-05-03 18:35:34

+0

@JoachimPileborg:是的,如果我在這裏沒有得到滿意的答案,這可能是我最終會做的。我只是想,如果我在研究期間遺漏了一些東西(不會是第一次),我會先問。 ;) – syam 2013-05-03 18:40:57

回答

3

我不知道有一個文檔提供了您需要的所有內容,但大部分文檔都已在某處進行了編目。

  • reference site與所有成員函數的所有容器
  • SO question複雜的大表,保證一大桌。
  • 這個SO question給你一個決策樹在容器之間進行選擇。

用於容器的成員函數的複雜性要求不太高很難記住,因爲只有4類:(攤銷)O(1)O(log N)O(N),和O(N log N)(成員函數std::list::sort()從而真正相交成的算法域標準庫),如果你想要的話,你可以製作一個4色編碼版本的cpp參考容器表。

選擇合適的容器可以像使用std::vector一樣簡單,除非您的分析器顯示瓶頸。達到這一點後,您必須在空間/時間複雜性,data locality,易於查找與易於插入/修改與額外不變量(分類,唯一性,iterator invalidation rules)之間做出權衡。

最難的部分是你必須平衡你的容器(空間要求)和你正在使用的算法(時間要求)。容器可以使用算法(例如std::vectorstd::sort,但沒有相同的插入複雜度)來維護不變量(例如std::map按其鍵值排序)。因此,在完成容器表之後,請確保爲算法執行類似的操作!

最後,沒有提及Boost.MultiIndex,沒有容器摘要將是完整的:因爲有時您不必選擇!

+0

感謝您的鏈接到我(我已經找到了cppreference.com之一),我不知何故錯過了這些,他們是非常有用的,特別是決策樹!所有這些絕對是構建我所想到的文檔的良好源代碼材料。 – syam 2013-05-03 18:52:10

+0

WRT to「*當你達到那個點時,你必須做出硬性的折衷...... *」=>是這正是我問這個問題的原因:我有這麼可怕的記憶,我浪費太多時間(IMO)搜索該文檔記住每個容器的所有這些約束。因此,「總結/一覽」請求。 ;) – syam 2013-05-03 19:02:04

+0

@syam過了一段時間後,他們變得非常熟悉:)有廣泛的類別,如序列容器(vector,array,deque,list),關聯容器(map,set,有/無unique_,有/沒有unordered_)有許多共同的成員職能。 – TemplateRex 2013-05-03 19:16:23