std::vector中resize()和reserve()的区别
capacity与size
了解这两个函数的区别,首先要搞清楚容器的capacity
(容量)与size
(长度)的区别。
- size指容器当前拥有的元素个数
- capacity则指容器在必须分配新存储空间之前可以存储的元素总数,即预分配存储空间的大小
应用区别
- 容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。
即,一个空的vector被resize(5)之后,这里面就有5个元素了,再push_back的元素是第6个。
- reserve()函数只是预分配空间没有初始化,所以不可访问。
resize的两种惯用法
(1)resize(n)
- 调整容器的长度大小,使其有且仅有
n
个元素
如果n小于容器的当前的size,则删除多出来的元素,否则,添加采用值初始化的元素。
即,resize的意思是:我就要n个元素,个数不够的话凑齐n
个(新添加元素值初始化),个数超了那就删除多余的。
(2) resize(n,t)
- 将所有新添加的元素初始化为
t
。
reserve用法(仅1种用法)
reserve(n)
- 预分配n个元素的存储空间
总结
- resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。
至于是否影响capacity,取决于调整后的容器的size是否大于capacity。
- reserve()函数和容器的capacity息息相关。
调用reserve(n)后,若容器的
capacity < n
,则重新分配内存空间,从而使得capacity等于n。如果capacity >= n
, capacity无变化。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步