美文网首页
C++ STL的vector扩容比例

C++ STL的vector扩容比例

作者: MaloFleur | 来源:发表于2021-09-12 17:58 被阅读0次

在vs下,vector 在插入新的元素时,如果容量已满的时候需要扩容为原容量的1.5倍
如果扩容是个常量(M),即下次扩容的容量为上次的M+K,若共有N个元素需要添加进vector(push_back)
则共需要N/M次扩容,若第一次容量为1,下一次1+M时需要复制1次,再下一次1+M```,1+KM(>=N)
则添加N个元素需要时间复杂度:
\sum_{i=0}^{N/M}{(1+iM)}=O(N^2)
平均时间复杂度为O(N)

如果扩容量是倍数(M),级下次扩容的容量为上次的MK,同理,共需要\log_MN次,若第一次容量为1,下一次扩容为M时需要复制1次,再下一次M次···,MK(>=N)
则添加N个元素需要时间复杂度:
\sum_{i=0}^{\log_MN}{M^i}=\frac{1-MN}{1-M}=O(N)
平均时间复杂度为O(1)

对于增长的倍数,一般不大于2,因为若倍数为2,参考如下分配:

0
 01
   0123
       01234567

由于两倍扩容,因此每次都是正好比上一次分配的空间大,因此之前分配的空间无法再复用
而若是1.5倍,同样的例子:

0
 01
   012
      01234
           01234567
                   0123456789ABC
012345···

可知,经历了几次扩容,之前的空间可以复用

相关文章

  • C++ STL的vector扩容比例

    在vs下,vector 在插入新的元素时,如果容量已满的时候需要扩容为原容量的1.5倍如果扩容是个常量(M),即下...

  • STL容器(1)-vector类

    STL vector vector是C++中的动态数组,支持动态扩容同时再末尾添加元素的时间复杂度控制在o(1) ...

  • #拖延症# 需要看的文章的记录

    C++ 对vector等STL标准容器进行排序操作--csdn该篇文章通过对vector排序的总结,明白stl是一...

  • C++ STL 之 vectot(三)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 容器增加元素 vector 容器增加...

  • C++ STL 之 vectot(四)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 容器删除元素 使用 clear() ...

  • 标准模板库-vector

    标准模板库-vector 1. vector简介 vector为C++的STL中的模板数组容器。在使用时需要包含#...

  • C++ STL 之 vectot(二)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 迭代器使用 与 array 类似,v...

  • C++ vector用法初记

    C++ vector用法小记 最近在leetcode上面做题,STL的vector用的甚多,这里稍微的总结下vec...

  • C++ Vector用法

    vector 是向量类型,它可以容纳许多类型的数据,称其为容器。vector 是C++ STL的一个重要容器,使用...

  • C++ STL vector

    vector是一个类模板,模板本身不是类或函数(类模板和函数模板),相反可以将模板看作编译器生成类或函数的一份说明...

网友评论

      本文标题:C++ STL的vector扩容比例

      本文链接:https://www.haomeiwen.com/subject/njjtgltx.html