1概念
- 动态数组
- vector 的实质配置空间大小比客户需求要大,一旦容量等于大小 便是满载 下次在有新增就得另寻他所。
- 注意:
- 所谓的动态增加并不是在原有的空间上续接新的空间而是申请一个更大的空间,然后将数据考过去。并释放原空间因此对vector的任何操作 一旦引起空间的重置 指向原vector的所有的迭代器就失效了
2常用函数
2.1构造函数
2.2vector常用赋值操作
2.3大小操作
2.4数据存储操作
2.5 插入删除操作
2.6实例
#include<iostream>
#include<vector>
using namespace std;
void test01(){
vector<int> v;
for(int i=0;i<10;i++){
v.push_back(i);
cout<<v.capacity()<<endl;
}
}
void Printf(vector<int>& v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
int test02(){
vector<int> v1;
vector<int> v2(10,100);
Printf(v2);
vector<int> v3(v2.begin(),v2.end());
Printf(v3);
vector<int> v4;
v4.assign(v3.begin(),v3.end());
v4=v3;
Printf(v4);
int arr[]={1,2,4,4,5};
vector<int> v5(arr,arr+5);
v4.swap(v5);
Printf(v4);
}
int test03(){
vector<int> v1;
v1.push_back(10);
v1.push_back(10);
v1.push_back(10);
v1.push_back(10);
if(v1.empty()){
cout<<v1.size()<<endl;
}
v1.resize(3);
Printf(v1);
v1.insert(v1.begin(),1000);
v1.insert(v1.begin(),2,2000);
Printf(v1);
cout<<v1.front()<<" "<<v1.back()<<endl;
v1.pop_back();
v1.erase(v1.begin());
v1.clear();
Printf(v1);
}
3技巧
3.1巧用swap来收缩内存
void test04(){
vector<int> v;
for(int i=0;i<10000;i++){
v.push_back(i);
}
cout<<v.capacity()<<endl;
cout<<v.size()<<endl;
v.resize(3);
cout<<"v.resize(3)"<<endl;
cout<<v.capacity()<<endl;
cout<<v.size()<<endl;
cout<<" 收缩容器"<<endl;
vector<int>(v).swap(v);
cout<<v.capacity()<<endl;
cout<<v.size()<<endl;
}
3.2巧用reserve来预留空间
void test05(){
vector<int> v;
v.reserve(10000);
int num=0;
int *p=NULL;
for(int i=0;i<10000;i++){
v.push_back(i);
if(p!=&v[0]){
p=&v[0];
num++;
}
}
cout<<"num:"<<num<<endl;
}
int void6(){
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
cout<<"逆序"<<endl;
for(vector<int>::reverse_iterator it=v1.rbegin();it!=v1.rend();it++){
cout<<*it<<" ";
}
cout<<endl;
}
3.3如何验证迭代器可以重载
int void7(){
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
vector<int>::iterator it=v1.begin();
it=it+2;
}
int main(){
test01();
}