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