vector的动态内存扩容机制
不同编译器扩容倍数不同
当size == capacity时,如果再进行插入操作(insert, push_back, emplace_back等),就会导致扩容
此时原vector中的所有迭代器都失效
测试程序:
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v(10);
cout << v.data() << endl;
cout << v.capacity() << endl;
v.push_back(0);
cout << v.data() << endl;
//gcc编译器下,capacity变为原来2倍,也就是20
//其他两个编译器下输出capacity变为原来1.5倍,也就是15
cout << v.capacity() << endl;
}
GCC编译器:
容量不够时,新开辟一块原来空间2倍的内存,然后将原来的数据都复制过去
CLANG和MSVC都是1.5倍扩容(vs2017编译器是MSVC)