1.resize()改变容器大小
resize除了预留内存以外,还会调用容器元素的构造函数,不仅分配了N个对象的内存,还会构造N个对象。从这个层面上来说,resize()
在时间效率上是比reserve()
低的。
2.reserve()容器大小管理
用于预留内存。
3.例子
#include <iostream>
#include<vector>
using namespace std;int main(){vector<int> a(5,1);cout<<a.size()<<" "<<a.capacity()<<endl;//5 5//表示定义的向量的size和容量a.resize(10);cout<<a.size()<<" "<<a.capacity()<<endl;//10 10//resize会改变容器中元素的数目,同时元素的容量也增大了a.resize(6);cout<<a.size()<<" "<<a.capacity()<<endl;//6 10//resize改变元素数目,后面的元素被删除,但是不会更改容量a.reserve(20);cout<<a.size()<<" "<<a.capacity()<<endl;//6 20//reserve不改变元素数目,增大了元素的容量a.reserve(10);cout<<a.size()<<" "<<a.capacity()<<endl;//6 20//当reserve更改的小于当前容量大小时,什么也不做,容量不会发生改变。a.reserve(3);cout<<a.size()<<" "<<a.capacity()<<endl;//6 20//当reserve更改的小于当前元素数目时,什么也不做,元素数目和容量都不会发生改变。return 0;
}
4.resize不能再次初始化
int main(){vector<int> a;a.resize(5,0);for(int i=0;i<a.size();i++){a[i]=5;}a.resize(5,0);for(auto b:a)cout<<b<<" ";return 0;
}
//输出:
5 5 5 5 5