首页 > 试题广场 >

STL 中 resize() 和 reserve() 的区别

[问答题]

STL 中 resize() 和 reserve() 的区别

推荐

得分点

capacity、size、重新调整大小、预留空间

参考答案

标准回答

resize() 和 reserve() 两个成员函数都是 vector 容器的公有成员函数,涉及到容器的 capacity 和 size。

  1. capacity 和 size

    capacity:该值在容器初始化时赋值,指的是容器能够容纳的最大的元素的个数,也就是容量。

    size:指的是容器中实际元素的个数。

  2. resize() 和 reserve() 的功能及区别

    resize():重新指定容器的长度,若容器变长,则以默认值填充新位置(还有一个重载的 resize() 函数,可以使用指定的元素进行填充),如果容器变短,则末尾超出容器长度的元素被删除。

    reserve():容器预留len个元素长度,预留位置不初始化,元素不可访问。

    resize() 既修改了 capacity 大小,也修改了 size 大小,而 reserve() 只修改 capacity 大小,不修改 size 大小。

编辑于 2021-09-15 11:26:43 回复(0)
1、resize(n) 
调整容器的长度大小,使其能容纳n个元素。
如果n小于容器的当前的size,则删除多出来的元素。
否则,添加采用值初始化的元素。
2、 resize(n,t)
多一个参数t,将所有新添加的元素初始化为t。
而reserver()的用法只有一种
reserve(n)
预分配n个元素的存储空间。
了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。
size指容器当前拥有的元素个数;
而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。
也可以说是预分配存储空间的大小。
resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。
至于是否影响capacity,取决于调整后的容器的size是否大于capacity。
reserve()函数和容器的capacity息息相关。
调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n。
如果capacity>=n呢?capacity无变化。
从两个函数的用途可以发现,容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。
而reserve()函数预分配出的空间没有被初始化,所以不可访问
发表于 2022-04-01 15:54:26 回复(0)
首先要了解两个概念,capacity和size
    1、capacity表示容器能够容纳的最大的元素个数
    2、size表示容器内实际的元素个数
resize和reserve的区别:
    1、resize不仅创建了容器的大小,还创建了实际的元素个数、而capacity只是创建了容器的预留大小,并能没有创建对象,只能通过insert和push_back创建对象
    2、resize修改的是size和capacity的大小、而reserve修改的是capacity的大小
    3、二者的参数也不一样,resize有两个参数:第一个参数表示创建的对象的大小,第二个参数表示是默认值。reserve只有一个参数,参数值表示预留的容器大小。
发表于 2022-07-24 22:30:09 回复(0)