通用概念。算法
順序容器基本理解:按照順序儲存元素,並提供 元素具體操做(迭代器或其餘) 和 順序訪問元素 的能力。數組
我的理解:安全
1)順序:按照添加的前後次序排序。但,先進優先,仍是後進優先取決於具體容器。網絡
我的應用:數據結構
1)在可使用容器時,儘可能使用容器。由於你沒法保證本身的算法優於整個開發組。函數
2)選擇容器的基本原則(from C+ primer):spa
1,在不知道如何選擇時,使用vector。設計
2,單個元素需求內存很小,內存緊缺時,不要使用list/forward_list。指針
3,已知添加操做時,儘可能使用符合 原設計思想 的容器。例如:頻繁的隨機插入/刪除,使用list/forward_list,而儘可能不使用vector,deque。對象
4,觸類旁通:混合添加操做時,選擇最頻繁的添加操做,做爲選擇容器的標準。例如:100次後置添加 + 一次隨機操做時,選擇vector,deque。反之:list/forward_list。
5,觸類旁通:添加操做在某些階段存在統一,則能夠進行容器替換。例如:輸入元素使用 list。輸入結束後,使用vector儲存(copy list),再進行讀取操做。
3)儘可能使用迭代器來操做容器——雖然有些容器支持下標。
vector容器:
一些細節:
1)使用連續內存保存元素。
2)能夠下標訪問元素(速度快)。但是看成動態數組使用。
3)中間添加/刪除元素耗時。因,須要從新調整內存。同時會致使迭代器失效(大機率)。
4)添加新元素時(push_back),也可能從新分配內存。致使迭代器失效(中機率)。
5)容器存在增加方式:超出時,按照必定量增長內存,以保證添加數個元素後,才須要再次分配內存。量值可經過函數設定(不建議)。
deque容器:
一些細節:
1)使用連續內存保存元素。
2)不肯定是否可使用下標訪問。
list容器:雙向鏈表。
一些細節:
1)使用鏈表的思想。
2)額外內存開銷相對較大。
3)不支持下標。
forward_list容器:
一些細節:
1)和list容器相似。
2)主要特徵:單向鏈表。
array容器:
一些細節:
1)對數組的封裝。增強安全性。
2)有數組的特性。
string容器:
一些細節:
1)使用連續內存保存元素。
2)用來保存字符串。
適配器:
概念:一個適配器是一種機制。經過適配器,可使容器從行爲上模仿其餘數據結構。
順序容器可用適配器:stack, queue, priority_queue。
我的理解:用來模擬一些通用的數據結構。如上:堆棧,隊列。
疑惑:爲什麼不直接作成容器?
基本常識:
1)主要爲:map 和 set。衍生型:multi和unorder.例如:multimap, unorder_multimap.
2)使用pair做爲單位元素。
1,key-value組成一個pair.
2,first成員:key。second成員:value。
3,key爲const類型不可改變。
3)關聯容器的構成:key-pair.
基本要點:
1)一般不對關聯容器使用 泛型算法。
2)有序關聯容器,有 嚴格弱序 的要求。默認使用 [<=]。固然,也可使用謂詞或lambda表達式來自定義。