vector和数组的区别

  • 数组是静态空间
  • vector可以动态扩展(找更大的内存空间,将原数据拷贝到新空间,释放原空间)

常用操作

//构造操作
vector<int> v1={1,2,3};
vector<int> v2(v1.begin(),v2.end());
vector<int> v3(10,100);//10个100
vector<int> v4(v3);

//赋值
vector<int> v1={1,2,3};

vector<int> v2;
v2=v1;

vector<int> v3;
v3.assign(v1.begin(),v1.end());//左开右闭

vector<int> v4;
v3.assign(10,100);

//容量和大小
vector<int> v1={1,2,3};
if(v1.empty()) cout<<"v1为空"<<endl;
int cap=v1.capacity();//容量
int size=v1.size();//大小
v1.resize(15);//重新指定大小,不足的会补0,超出的会删除

//插入和删除
vector<int> v1={1,2,3};
v1.insert(v1.begin(),0);//头插
v1.insert(v1.begin(),2,0);//在最前面插入两个0
v1.erase(v1.begin());//删除第一个元素
v1.erase(v1.begin(),v1.end());//删除[begin,end)区间内的元素
v1.clear();//清空数组

//数据存取
vector<int> v1={1,2,3};
cout<<v1.at(1)<<endl;//2
cout<<v1.front()<<endl;//1
cout<<v1.back()<<endl;//3

//互换容器
vector<int> v1={1,2,3};
vector<int> v1={4,5,6};
v1.swap(v2);
//可用于收缩内存空间
vector<int> v2(10000,1);
v2.resize(3);
vector<int>(v3).swap(v3);//容量变为3,vector<int>(v3)为匿名对象,会使用v3目前实际所用元素个数来初始化匿名对象

//预留空间
//减少vector在动态扩容中的扩展次数
//reserve(int len) 容器预留len个元素长度,预留位置不初始化,元素不可访问