2010-10-24 65 views
21

C++ standard library containers的常規用例是什麼?C++容器的一般用例

  • 位集
  • 雙端隊列
  • 列表
  • 地圖
  • 多重映射
  • 多重集
  • priority_queue
  • 隊列
  • 設置
  • 矢量

例如,地圖通常是用於配對的搜索更好。

+1

這是[在哪種情況下我使用特定的STL容器?]的副本(https://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular- stl-container) - 這兩個接受的答案都使用完全相同的圖像,並且這個答案早一點,並且有更多的答案,所以......似乎沒有任何必要有2個。 – 2017-08-02 13:47:49

回答

78

一張圖片勝過千言萬語。

container choice flowchart

它是購自nolyc,Freenode上## C++的信息機器人,使用命令 「容器選擇」 或 「containerchoice」。您收到此圖片的鏈接是adrinael.net,這表明我們應該感謝Adrinael,Freenode的## C++社區成員。

+13

+1:這是一個非常有用的圖片。 – Arun 2010-10-24 20:00:00

+1

非常有用的圖片,幾乎正是我正在尋找的 – Elpezmuerto 2010-10-24 20:00:54

+2

您是否有更新版本以反映新的C++ 11容器? – Arbalest 2013-09-22 00:18:40

13

bitset - 用於存儲位。通用 - 存儲一些標誌的值。你不需要那麼多1比特。

deque - 雙端隊列 - push_back,push_front,pop_back和pop_front - 基本類的方法。 「未排序」(無序)容器。

list - 鏈表。這個容器不是內存連續的。它添加和刪除元素的時間是O(1),但是查找特定元素是O(n)。無序容器。

map - 容器,存儲對(std :: pair)。第一個是關鍵 - 地圖中的每個元素都必須具有唯一的關鍵字。地圖以樹形式表示,因此在地圖中搜索元素爲n * log(n)。這個容器總是被排序的,這就是爲什麼添加和移除元素可能會導致更多時間 - 樹(數據結構)是二進制和平衡的。

multimap - 與std :: map幾乎相同,但允許具有相同鍵的配對。例如,多圖可能包含元素:(666,「alabala」),(666,「asdfg」),而標準std :: map不能。這個容器也被分類。

multiset - 再次 - 與設置相同,但具有可重複的元素。設置 - 好吧,這也是一直排序的STL容器。例如,一個集合是{1,2,3},並且當您嘗試向此集合中添加'1'時,它將不會被添加,因爲已經有這樣的元素。 (這與數學的設定類似)。因此,multiset允許具有相同值的多個元素,例如{1,1,1,2,3,4,4,4,4}是正確的多重集,而它的不是的集合。將元素添加到std :: set中仍然是對數時間,因爲它表示爲二進制排序和平衡樹。

priority_queue - 根據一些嚴格的弱排序條件,它的第一個元素總是包含的元素中最大的元素。基本功能 - push_back和pop_back。

queue - FIFO結構 - 先進先出。 (或者與LILO - Last In - Last Out相同)。這與標準隊列類似 - 當你去商店並開始排隊等候時,第一個將是第一個去。你可以push_back和pop_front。無序容器。

set - 我已經在multiset部分描述過它。

stack - LIFO - 後進先出 - 堆棧。基本功能 - push_back,pop_back。無序容器。

vector - 類似於標準的C++數組。它被視爲常規數組,它是內存連續的,可以傳遞給C程序(傳遞第一個元素的地址)。無序容器。

重要說明:我描述了基本功能,而不是整個功能。閱讀CPlusPlus.com瞭解更多信息。

+2

我不知道2010年的情況如何,但現在我看到有人建議使用[cppreference.com](http://en.cppreference.com/w/)而不是cplusplus.com,因爲感覺_cppreference_質量更好。 _cppreference_的等價鏈接是:[容器庫](http://en.cppreference.com/w/cpp/container)Btw,我可以保證這個線程中沒有人使用STL;他們使用標準庫,這恰好適應了STL。見http://stackoverflow.com/questions/5205491/whats-this-stl-vs-c-standard-library-fight-all-about/5205571#5205571 – 2017-08-02 20:15:43

+0

@underscore_d - 是的,cppreference.com絕對是更好的來源。我不再使用cplusplus.com,它是..讓我們這樣說 - 我不會推薦它。我也同意STL和標準庫。 – 2017-08-03 07:00:53