1. 程式人生 > >STL中的Map和Vector的內部實現

STL中的Map和Vector的內部實現



這裡寫圖片描述

兩個關鍵大小:
大小:size=_Mylast - _Myfirst;
容量:capacity=_Myend - _Myfirst;
分別對應於resize()、reserve()兩個函式。
size表示vector中已有元素的個數,容量表示vector最多可儲存的元素的個數;為了降低二次分配時的成本,vector實際配置的大小可能比客戶需求的更大一些,以備將來擴充,這就是容量的概念。即capacity>=size,當等於時,容器此時已滿,若再要加入新的元素時,就要重新進行記憶體分配,整個vector的資料都要移動到新記憶體。二次分配成本較高,在實際操作時,應儘量預留一定空間,避免二次分配。

構造一個vector時,首要引數一定是元素個數。需要避免二次分配,可以使vector效能最佳

#include <iostream>
 2 #include <vector>
 3 int main()
 4 {
 5     std::vector<int> v;
 6     std::cout << "Default-constructed capacity is " << v.capacity() << '\n';
 7     v.resize(100);
 8     std::cout << "Capacity of a 100-element vector is " << v.capacity() << '\n';
 9     v.clear();
10     std::cout << "Capacity after clear() is " << v.capacity() << '\n';
11     v.shrink_to_fit();
12     std::cout << "Capacity after shrink_to_fit() is " << v.capacity() << '\n';


13 }

上述程式碼實現了vector的壓縮。

Map儲存的是一種 key - value 的pair物件,其中 key 是關鍵字,value 是關鍵字對應的值。通過 key找到對應的 value。map中按照 key的大小升序排列pair物件。