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无变化。

posted @ 2022-05-15 16:27  时间的风景  阅读(1264)  评论(0编辑  收藏  举报