前言
在 C++ 编程中,Vector 是一种常用的动态数组容器。其大小是可以动态调整的,而在扩容操作中,Vector 通常会将容量增加为原来的两倍。本篇博客将详细介绍 Vector 扩容的原理、扩容过程,并解释为何选择两倍进行扩容。
一、Vector 扩容过程
当向vector中插入元素时,如果元素有效个数size与空间容量capacity相等时,vector内部会触发扩容机制
扩容的过程是:开辟新空间->拷贝旧空间的元素->释放旧空间
每次扩容新空间不能太大,也不能太小,太大容易造成空间浪费,太小则会导致频繁扩容而影响程序效。
二、为什么是1.5倍或者2倍?
如果新空间大小为旧空间大小+1,也就是边插入边扩容,这样每一次插入都要进行拷贝,时间复杂度为O(n),效率非常低下。
如果新空间大小为旧空间大小+k,其中k是一个固定的增量,那么在每次扩容时,新空间的大小会增加k个单位。假设原始空间大小为n,进行m次扩容后,新空间的大小为n + m*k。平摊下来每次插入的时间复杂度还是O(n),效率非常低下。
以倍数方式进行扩容
假设有n个元素需要像ve