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对象。