Vector容器:
Vector相比于 array 空间的运用更灵活, array是静态空间,一旦配置了就不能再改变。 而vector 是动态空间会随着数据量的增加
自动扩容(扩容机制 (重新开辟内存, 复制, 为什么二倍扩容))
首先 自动扩容为什么是成倍的 而不是一次性增加多少数值这样子。
(原因:因为成倍扩容它的复杂度平均下来是 常数级, 而一次性增加多少数值是O(n))
为什么是2倍
原因: (首先不一定是2倍 也有可能是1.5倍)考虑可能产生的堆空间浪费,成倍增长倍数不能太大,使用较为广泛的扩容方式有两种,以2二倍的方式扩容,或者以1.5倍的方式扩容。
以2倍的方式扩容,导致下一次申请的内存必然大于之前分配内存的总和,导致之前分配的内存不能再被使用(这句话表述是不是有点问题),所以最好倍增长因子设置为(1,2)之间:
Vector 底层实现:
vector,底层是一块具有连续内存的数组,vector的核心在于其长度自动可变。vector的数据结构主要由三个迭代器(指针)来完成:指向首元素的start,指向尾元素的finish和指向内存末端的end_of_storage。vector的扩容机制是:当目前可用的空间不足时,分配目前空间的两倍或者目前空间加上所需的新空间大小(取较大值),容量的扩张必须经过“重新配置、元素移动、释放原空间”等过程。
Vector 查找 插入 删除的时间复杂度
vector,vector支持随机访问(通过下标),时间