resize() reserve()函数的区别
首先介绍size和capacity的含义
- size:指的是vector包含元素的个数。size()函数可以获取size大小。
- capacity:指的的是vector包含元素的能力,也就是在size小于capacity不会进行内存拷贝;一旦size大于capacity将会进行内存拷贝,也就是vector的扩容。capacity() 函数可以获取capacity大小。
resize()函数
- 重新分配大小。
reserve()函数
- 只是保证vector的空间大小(capacity)最少达到它的参数所指定的大。
当前size()为50, capacity()为100,经过以下操作:
(1) resize(10). //size() == 10; 10到49下标的元素被删除. capacity()==100,不变,没有进行内存重新分配.
(2) resize(60). //size() == 60; 50到59下标用默认构造函数填充. capacity() == 100,不变,没有进行内存重新分配.
(3) resize(60, 9999). //size() == 60; 50到59下标用9999填充. capacity() == 100,不变,没有进行内存重新分配.
(4) resize(200). //size() == 200; 50到199下载用默认构造函数填充. capacity() == 200, 自动扩容,重新分配内存.
(5) reserve(10). //size() == 50; 不变,没有元素被删除, capacity() == 100, 不变. 即reserve调用没起作用.
(6) reserve(60). //size() == 50; 元素没有变, capacity() == 100, 不变. 即reserve调用没起作用.
(7) reserve(200). //size() == 50; 元素没有变, capacity() == 200, 扩容,重新分配内存.
资料:
http://www.360doc.com/content/13/0917/13/6432946_315151308.shtml
https://www.cnblogs.com/jiu0821/p/4415829.html