当vector满了之后,capacity()的自动扩充策略,扩充多少?
在C++中,当vector满了之后,capacity()的自动扩充策略是实现定义的,但大多数标准库实现采用指数增长策略。
主要实现的增长策略
1. GCC/Clang (libstdc++)
-
通常采用 2倍增长 或 1.5倍增长
-
在GCC中,一般是:
new_capacity = max(2 * old_capacity, 1)
2. MSVC (Microsoft STL)
-
通常采用 1.5倍增长
-
具体公式:
new_capacity = old_capacity + old_capacity / 2
测试方法:
在Windows中使用VSStudio(MSVC)测试:
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec;//最初容器没有元素,容量为空vec.reserve(10);//初始容量cout << "容量" << vec.capacity() << endl;vector<int>::iterator it;int i = 0;int count = 0;for (i = 0; i < 100; i++) {vec.push_back(i);count++;cout << "count : " << count << endl;cout << "开辟空间容量: " << vec.capacity() << endl;}return 0;
}
测试:





从10=》15,增长:15/10 = 1.5;
从15=》22,增长:22/15 =1.46;
从22=》33,增长:33/22=1.5;
从33=》49,增长:49/33=1.48;
从49=》73,增长:73/49=1.49;
结论:在Windows中使用VSStudio(MSVC)测试发现,确实是每次增长到之前的1.5倍!!
