引言
在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)。
区别与联系
-
使用resize方法时,改变了vector中元素的个数,即vector的大小,但不会改变vector的容量大小;
-
如果resize中所指定的n小于vector中当前的元素数量,则会删除vector中多于n的元素,使vector得大小变为n;如果resize指定的大小n小于vector当前的大小时,会减小vector的大小,但无论resize中是否指定初始化值,都不会影响vector中原本已经存在的元素值;
-
当resize中所指定的n大于vector当前的大小,但是小于vector当前的容量大小时,会在vector后面插入适量的元素,使得vector的大小满足n,如果指定了初始值,则会把新插入的元素初始化为指定的初始值,如果没有指定初始值,则将会把新插入的元素初始化为默认初始值,即0;
-
当resize中所指定的n大于vector当前的大小,并且大于vector当前的容量大小时,会为vector重新分配存储空间。