版权声明: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;
}
结果