stl不是面向對象的編程,而是一種不一樣的編程模式————泛型編程數據庫
咱們經常使用到的STL容器有vector、list、deque、map、multimap、set、multiset編程
順序性容器:vector、deque、list
關聯性容器:set、multiset、map、multimap
容器適配器:stack、queue數組
vector相似於動態數組,直接訪問元素,從後面快速插入或者刪除;
vector相似於C語言中的數組,它維護一段連續的內存空間,具備固定的起始地址,於是能很是方便地進行隨機存取,即 [] 操做符,但由於它的內存區域是連續的,因此在它中間插入或刪除某個元素,須要複製並移動現有的元素。此外,當被插入的內存空間不夠時,須要從新申請一塊足夠大的內存並進行內存拷貝。值得注意的是,vector每次擴容爲原來的兩倍,對小對象來講執行效率高,但若是遇到大對象,執行效率就低了。數據結構
能夠從任何地方插入或者刪除;
相似於C語言中的雙向鏈表,它經過指針來進行數據的訪問,所以維護的內存空間能夠不連續,這也很是有利於數據的隨機存取,於是它沒有提供 [] 操做符重載; 性能
是一個double-ended queue
1)支持隨即存取,也就是[]操做符,
2)支持兩端操做,push(pop)-back(front),在兩端操做上與list效率差很少
spa
1)可用 vector, list, deque來實現
2)缺省狀況下,用deque實現
template<classT, class Cont = deque<T> >
class stack { ….. };
3)用 vector和deque實現,比用list實現性能好
4)stack是後進先出的數據結構,
5)只能插入、刪除、訪問棧頂的元素的操做: push: 插入元素pop: 彈出元素 top: 返回棧頂元素的引用指針
map相似於數據庫中的1:1關係,它是一種關聯容器,提供一對一(C++ primer中文版中將第一個譯爲鍵,每一個鍵只能在map中出現一次,第二個被譯爲該鍵對應的值)的數據處理能力,這種特性了使得map相似於數據結構裏的紅黑二叉樹。
對象
相似於數據庫中的1:N關係,它是一種關聯容器,提供一對多的數據處理能力。
內存
相似於數學裏面的集合,不過set的集合中不包含重複的元素,這是和vector的第一個區別,第二個區別是set內部用平衡二叉樹實現,便於元素查找,而vector是使用連續內存存儲,便於隨機存取。
數學
相似於數學裏面的集合,集合中能夠包含重複的元素。
在實際使用過程當中,到底選擇這幾種容器中的哪個,應該根據遵循如下原則:
一、若是須要高效的隨機存取,不在意插入和刪除的效率,使用vector;
二、若是須要大量的插入和刪除元素,不關心隨機存取的效率,使用list;
三、若是須要隨機存取,而且關心兩端數據的插入和刪除效率,使用deque;
四、若是打算存儲數據字典,而且要求方便地根據key找到value,一對一的狀況使用map,一對多的狀況使用multimap;
五、若是打算查找一個元素是否存在於某集合中,惟一存在的狀況使用set,不惟一存在的狀況使用multiset。