vector 的内存分配问题
vector 有一个机制是这样的,如果新加入一个元素,如果size 大于了capacity,那么vector 就会重新找一块更大的地方再把数据放进去,下面进入调试:
这是原本vector首个元素的地址,这时size 和capacity 都是1,下面新增一个元素让size大于capacity
可以看到当size 大于capacity 之后内存确实进行重新分配,vector首元素的地址发生了改变,而且原来的值也乱了,为什么呢?下面给出解释:
重新分配的过程:
申请一块新的内存 >>> 拷贝数据 >>> 释放原内存
所以,使用vector容器的时候可以预先空间,把capacity定得够大,这样可以尽量避免重新分配vector 的内存,不增加程序的负担。
例:
int main()
{
vector <int> A;
A.reserve(10);
return 0;
}