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

版权声明:Nicolas https://blog.csdn.net/qq_42835910/article/details/85445530

两个函数的定义

reserve 函数

语法:

  void reserve( size_type size );

reserve()函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size)


resize 函数

语法:

  void resize( size_type size, TYPE val );

resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val

resize()函数也可以只有一个参数,这是val默认为0.

简单点来说就是resize()改变vector的size,reserve()改变vector的capacity。

resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。

至于是否影响capacity,取决于调整后的容器的size是否大于capacity。

那么当vector,push一个值后,vector的size直接+1。

访问size内的值为默认值。

reserve()函数和容器的capacity息息相关。

调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n。

如果capacity>=n呢?capacity无变化。

那么当vector,push一个值后,vector的size不变(<capacity);

上代码

#include <iostream>
#include <vector>
using namespace std; 

int main(int argc, char** argv) {
	vector<int> a,b;
	int n=5;
	a.resize(n);
	b.reserve(n);
	cout<<"a.size()="<<a.size()<<"\t\tb.size()="<<b.size()<<endl;
	cout<<"a.capacity()="<<a.capacity()<<"\t\tb.capacity()="<<b.capacity()<<endl;
	a.push_back(5);
	b.push_back(5);
	cout<<"a.size()="<<a.size()<<"\t\tb.size()="<<b.size()<<endl;
	cout<<"a.capacity()="<<a.capacity()<<"\t\tb.capacity()="<<b.capacity()<<endl;
	a[3]=5;b[3]=5;
	for(int i=0;i<a.size();i++)
		cout<<"a["<<i<<"]="<<a[i]<<" ";
	cout<<endl;
	for(int i=0;i<b.size();i++)
	cout<<"b["<<i<<"]="<<b[i]<<" ";
	cout<<endl;
	return 0;
}

结果

猜你喜欢

转载自blog.csdn.net/qq_42835910/article/details/85445530
今日推荐