vector 底层原理和扩容过程
4 分钟阅读
•
477 字
+
436 词
参考答案
- 底层原理
-
vector是C++标准库中的一个容器,可以看作是一个 动态数组 ,它的大小可以根据元素的增加而增长。它通过在堆上分配一段 连续的内存空间存放元素 ,支持时间复杂度为O(1 )的随机访问。 -
vector底层维护了三个 迭代器 和两个变量,这三个迭代器分别指向对象的起始字节位置,最后一个元素的末尾字节和整个vector分配空间的末尾字节。两个变量分别是size和capacity,Size表示当前存储元素的数量,capacity表示当前分配空间的大小。当创建一个vector对象时,会分配一个初始化大小的空间存放元素,初始化空间可以通过构造函数的参数指定,缺省情况下为0。当对vector容器进行增加和删除元素时,只需要调整末尾元素指针,而不需要移动整个内存块。
- 扩容机制
-
当添加元素的数量达到当前分配空间的大小时,
vector会申请一个更大的内存块,然后将元素从旧的内存块拷贝到新的内存块中,并释放旧的内存块。 扩容可能导致原有迭代器和指针失效,扩容完成后,容器返回指向新内存区域的迭代器或指针。 -
vector扩容的机制分为固定扩容和加倍扩容。- 固定扩容就是在每次扩容时在原容量的基础上增加固定容量。但是固定扩容可能会面临多次扩容(扩容的不够大)的情况,时间复杂度较高。
- 加倍扩容就是在每次扩容时原容量翻倍,优点是使得正常情况下扩容的次数大大减少,时间复杂度低,缺点是空间利用率低。