1. 程式人生 > 實用技巧 >c++容器共性機制研究

c++容器共性機制研究

容器的共通能力
C++模板是容器的概念。
在這裡插入圖片描述
理論提高:所有容器提供的都是值(value)語意,而非引用(reference)語意。容器執行插入元素的操作時,內部實施拷貝動作。所以STL容器記憶體儲的元素必須能夠被拷貝(必須提供拷貝建構函式)。

除了queue與stack外,每個容器都提供可返回迭代器的函式,運用返回的迭代器就可以訪問元素。
通常STL不會丟出異常。要求使用者確保傳入正確的引數。
每個容器都提供了一個預設建構函式跟一個預設拷貝建構函式。
如已有容器vecIntA。
vector vecIntB(vecIntA); //呼叫拷貝建構函式,複製vecIntA到vecIntB中。

與大小相關的操作方法(c代表容器):
c.size(); //返回容器中元素的個數
c.empty(); //判斷容器是否為空
比較操作(c1,c2代表容器):
c1 == c2 判斷c1是否等於c2
c1 != c2 判斷c1是否不等於c2
c1 = c2 把c2的所有元素指派給c1

各個容器的使用時機
在這裡插入圖片描述
 deque的使用場景:比如排隊購票系統,對排隊者的儲存可以採用deque,支援頭端的快速移除,尾端的快速新增。如果採用vector,則頭端移除時,會移動大量的資料,速度慢。
vector與deque的比較:
一:vector.at()比deque.at()效率高,比如vector.at(0)是固定的,deque的開始位置卻是不固定的。

二:如果有大量釋放操作的話,vector花的時間更少,這跟二者的內部實現有關。
三:deque支援頭部的快速插入與快速移除,這是deque的優點。
list的使用場景:比如公交車乘客的儲存,隨時可能有乘客下車,支援頻繁的不確實位置元素的移除插入。
set的使用場景:比如對手機遊戲的個人得分記錄的儲存,儲存要求從高分到低分的順序排列。
map的使用場景:比如按ID號儲存十萬個使用者,想要快速要通過ID查詢對應的使用者。二叉樹的查詢效率,這時就體現出來了。如果是vector容器,最壞的情況下可能要遍歷完整個容器才能找到該使用者。