欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vector的resize()和reserve()方法的区别

程序员文章站 2022-03-21 19:49:36
...

今天在写代码的时候发现了一个奇怪的现象,当vector对象使用resize()方法之后再使用insert()插入元素,vector对象的size会在使用resize(n)后的n基础上增加,而使用reserve()方法后,insert()方法插入元素不会在使用reserve(n)后的n基础上增加。
经过研究,我发现:
resize()同时改变了capacity()和size(),而reserve()只是增加了vector的capacity(),但是它的size()没有改变。
例如:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> v;
	v.reserve(10);
	v.insert(v.end(), 5, 0);
	return 0;
}

因为reserve只是改变了capacity(如果发现原来的capacity小于新的容量,就改变capacity,但是size是不变的),reserve执行后size仍然是0,当insert函数执行后,新元素是从0个元素后开始插的,最后的size是5。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> v;
	v.resize(10);
	v.insert(v.end(), 5, 0);
	return 0;
}

因为resize要改变size和capacity(主要是改变size,如果发现原来的capacity放不下新的size,则改变capacity),所以在resize执行完之后size就已经是10,调用insert是从10个元素之后插入,最后size是15。

相关标签: C++