【STL】 vector之 resize 和 reserve函数

引言

在vector 中有 size() 和 capacity() 两个概念。

size()是容器中实际的元素个数有多少(大小);capacity() 是容器的最大可存储空间。 resize() 改变的是元素个数的大小,reserve()改变的是存储空间。 存储空间大于等于元素个数大小。

resize

void resize (size_type n, value_type val = value_type());

  • 用来改变vector的大小(即size),即vector中元素的数量。
  • 如果resize中指定的n小于当前的大小,则删除元素,只留下n个元素。
  • 如果所指定的n大于当前元素数量,则在尾部插入适合的元素,将size(),扩大至n。如果指定了第二个参数,则使用该参数追加。如果没有指定,使用默认参数–0。
  • 如果n大于了当前容量的大小(capacity),则重新分配存储空间。

reserve

void reserve (size_type n);

  • 该方法用来重新分配容量的大小。
  • 只有申请大于原来的容量时,才会重新分配存储空间。否则不会改变原来的容量大小。
  • 该方法不影响vector的大小(即size)。

区别与联系

  1. 使用resize方法时,改变了vector中元素的个数,即vector的大小,但不会改变vector的容量大小;

  2. 如果resize中所指定的n小于vector中当前的元素数量,则会删除vector中多于n的元素,使vector得大小变为n;如果resize指定的大小n小于vector当前的大小时,会减小vector的大小,但无论resize中是否指定初始化值,都不会影响vector中原本已经存在的元素值;

  3. 当resize中所指定的n大于vector当前的大小,但是小于vector当前的容量大小时,会在vector后面插入适量的元素,使得vector的大小满足n,如果指定了初始值,则会把新插入的元素初始化为指定的初始值,如果没有指定初始值,则将会把新插入的元素初始化为默认初始值,即0;

  4. 当resize中所指定的n大于vector当前的大小,并且大于vector当前的容量大小时,会为vector重新分配存储空间。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页