vector是变长的数组,每次使用的时候
如果超过现在的容量(capacity)大小
会自动重新分配内存
那么每次都会增长多少呢
有人说是增长原来大小的一半
为了一探究竟,可以直接打开stl的源码看一下

#include <iostream>
#include <vector>

using namespace std;

#define debug(x) cout<<#x<<": "<<(x)<<endl;

int main() {

vector<int> a;
debug(a.capacity())

for (int i = 0; i < 1000; ++i) {
a.push_back(i);
cout << i << ", " << a.capacity() << endl;
}

return 0;
}

【STL源码阅读】 vector 内存增长策略_#include

在不指定大小的情况下,cap大小是0
随着push_back的进行,cap好像确实是按照原来大小一半在增长


这里使用的是vs2019 sdk版本

【STL源码阅读】 vector 内存增长策略_c++_02


push back调用了emplace_back

【STL源码阅读】 vector 内存增长策略_stl_03


emplace_back 在cap不够用的时候 调用重新分配内存

【STL源码阅读】 vector 内存增长策略_c++_04


而我们要找的增长策略就是这个_Calculate_growth

【STL源码阅读】 vector 内存增长策略_stl_05


确实是增长了一半,啊 没用的知识有增加了!

【STL源码阅读】 vector 内存增长策略_c++_06