list封裝了鏈表,vector封裝了數組, list和vector得最主要的區別在於vector使用連續內存存儲的,他支持[]運算符,而list是以鏈表形式實現的,不支持[]。Vector對於隨機訪問的速度很快,可是對於插入尤爲是在頭部插入元素速度很慢,在尾部插入速度很快。List對於隨機訪問速度慢得多,由於可能要遍歷 整個鏈表才能作到,可是對於插入就快的多了,不須要拷貝和移動數據,只須要改變指針的指向就能夠了。另外對於新添加的元素,Vector有一套算法,而 List能夠任意加入。算法
Map,Set屬於標準關聯容器,使用了很是高效的平衡檢索二叉樹:紅黑樹,他的插入刪除效率比其餘序列容器高是由於不須要作內存拷貝和內存移動,而直接替換指向節點的指針便可。數組
Set和Vector的區別在於Set不包含重複的數據。Set和Map的區別在於Set只含有Key,而Map有一個Key和Key所對應的Value這兩個元素。函數
Map和Hash_Map的區別是Hash_Map使用了Hash算法來加快查找過程,可是須要更多的內存來存放這些Hash桶元素,所以能夠算得上是採用空間來換取時間策略。spa
在內存中分配一塊連續的內存空間進行存儲。支持不指定vector大小的存儲。STL內部實現時,首先分配一個很是大的內存空間預備進行存儲,即capacituy()函數返回的大小,當超過此分配的空間時再總體從新放分配一塊內存存儲,這給人以vector擁有一個連續內存的大小的感受。一般此默認的內存分配能完成大部分狀況下的存儲。
優勢:(1) 不指定一塊內存大小的數組的連續存儲,便可以像數組同樣操做,但能夠對此數組進行動態操做。一般體如今push_back(),pop_back()
(2) 隨機訪問方便,即支持[ ]操做符和vector.at()
(3) 節省空間。
缺點:(1) 在內部進行插入刪除操做效率低。
(2) 只能在vector的最後進行push和pop,不能在vector的頭進行push和pop。
(3) 當動態添加的數據超過vector默認分配的大小時要進行總體的從新分配、拷貝與釋
放
指針
每個結點都包括一個信息快Info、一個前驅指針Pre、一個後驅指針Post。能夠不分配必須的內存大小方便的進行添加和刪除操做。使用的是非連續的內存空間進行存儲。
優勢:(1) 不使用連續內存完成動態操做。
(2) 在內部方便的進行插入和刪除操做
(3) 可在兩端進行push、pop
缺點:(1) 不能進行內部的隨機訪問,即不支持[ ]操做符和vector.at()
(2) 相對於verctor佔用內存多
內存
deque是在功能上合併了vector和list。
優勢:(1) 隨機訪問方便,即支持[ ]操做符和vector.at()
(2) 在內部方便的進行插入和刪除操做
(3) 可在兩端進行push、pop
缺點:(1) 佔用內存多
ci
使用區別:
1 若是你須要高效的隨即存取,而不在意插入和刪除的效率,使用vector
2 若是你須要大量的插入和刪除,而不關心隨即存取,則應使用list
3 若是你須要隨即存取,並且關心兩端數據的插入和刪除,則應使用dequeit