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();
}