问题
vector 与 C 中的数组不同,是一个数组大小可以动态变化的容器。那么这个变化过程具体是怎么变的呢,怎样才可以提高 vector 的使用效率呢?
原理概述
vector 存储的空间在内存中是连续的,如果 vector 现有空间已存满元素,在 push_back 新增数据的时候就要分配一块更大的内存,将原来的数据 copy 过来,接着释放之前的内存,再在新的内存空间中存入新增的元素。
不同编译器对 vector 的扩容方式实现不一样,在 vs 中以 1.5 倍扩容,而在 gcc 中以 2 倍扩容,后面我们会看到以 1.5 倍扩容的方式效果更好。
vector 的初始的扩容方式代价太大,初始扩