vector相當於一個動態的數組,當程序員無法知道自己需要的數組的規模多大時,
用其來解決問題可以達到最大節約空間的目的.
就是常數很大,但要是開了O2,一切都不是問題。
就像數組一樣,vector也采用的連續存儲空間來存儲元素。
也就是意味着可以采用下標對vector的元素進行訪問,和數組一樣高效。
但是又不像數組,它的大小是可以動態改變的,而且它的大小會被容器自動處理。
但是對於編程來講,我們只會用就可以了。
NEXT,用法奉上。
1.vector的元素不僅僅可以是int,double,string,還可以是結構體,但是要注意:結構體要定義為全局的,否則會出錯。
2.當然,要有頭文件#include<vector>
3.我們以vector<int>a;為例
基本上包含了vector的常用函數(不夠再補)
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define DB double 4 using namespace std; 5 const int tmp=100; 6 vector<int>a;//創建vector對象 7 vector<int>b(6,9); 8 /*vector的聲明及初始化 9 vector<int> a; //聲明一個int型向量 10 vector<int> a(5); //聲明一個初始大小為5的int向量 11 vector<int> a(10, 1); //聲明一個初始大小為10且值都是1的向量 12 vector<int> a(tmp); //聲明並用tmp向量初始化vec向量 13 vector<int> tmp(a.begin(), a.begin() + 3); //用向量vec的第0個到第2個值初始化tmp 14 int arr[5] = {1, 2, 3, 4, 5}; //下標依舊是從0開始 15 vector<int> a(arr, arr+ 5); //將arr數組的元素用於初始化vec向量 16 //說明:當然不包括arr[4]元素,末尾指針都是指結束元素的下一個元素, 17 //這個主要是為了和vec.end()指針統一。 18 vector<int> vec(&arr[1], &arr[4]); //將arr[1]~arr[4]范圍內的元素作為vec的初始值 19 */ 20 int main() 21 { 22 for(int i=11;i<=20;++i) a.push_back(i);//尾部插入數字,下標從0開始 23 cout<<a.front()<<endl;//傳回第一個數據 24 cout<<a.back()<<endl;//傳回最后一個數據 25 cout<<a.capacity()<<endl;//返回容器當前能夠容納的元素數量 26 cout<<a.size()<<endl;//返回當前容器中實際的元素個數 27 cout<<a.empty()<<endl;//判斷容器是否為空,空是1,非空是0 28 cout<<a.max_size()<<endl;//返回容器可以存儲的最多元素數目 29 for(int i=0;i<a.size();++i) cout<<a.at(i)<<" ";cout<<endl;//a.at(i)得到編號位置的數據 30 /*****************************************************************************************/ 31 /* lower_bound(a.begin(),a.end(),x) 返回>=x的第一個數的下標(指針) 32 upper_bound(a.begin(),a.end(),x) 返回>=x的第一個數的下標(指針) 33 *************************************************************************************************/ 34 for(int i=1;i<=10;++i) cout<<a[i-1]<<" ";cout<<endl;//使用下標訪問元素 35 std::vector<int>::iterator it; 36 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;//使用迭代器訪問元素 37 /*a.begin() 返回指向容器第一個元素的迭代器 38 a.end() 返回指向容器最后一個元素的迭代器*/ 39 /******************************************************************************************/ 40 a.insert(a.begin()+4,211);//a.insert(a.begin()+i,a);在第i個元素后面插入a;傳回新數據位置的迭代器 41 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 42 a.insert(a.begin()+5,3,985); 43 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 44 /****************************************************************************************/ 45 a.erase(a.begin()+4);//a.erase(a.begin()+i);刪除第i+1個元素;傳回下一個數據的位置的迭代器 46 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 47 a.erase(a.begin()+1,a.begin()+4);//a.erase(a.begin()+i,a.end()+j);刪除區間[i,j-1];區間從0開始;傳回下一個數據的位置的迭代器 48 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 49 /***********************************************************************************************/ 50 a.pop_back();//刪除最后一個數據 51 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 52 vector<int>::reverse_iterator p; 53 for(p=a.rbegin();p!=a.rend();++p) cout<<*p<<" ";cout<<endl; 54 /*a.rbegin() 傳回一個逆向的第一個數據的迭代器 55 a.rend() 傳回一個逆向的最后一個數據的下一個位置的迭代器 */ 56 /**************************************************************************************************/ 57 a.resize(6);//重新指定隊列的長度,即只剩前六個元素,剩下的元素都刪除了 58 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 59 a.reserve(100);//增加隊列容量,就是reserve增加的空間未被初始化不能引用 60 cout<<a.size()<<endl; 61 /***********************************************************************************************/ 62 swap(a[3],a[0]);//交換隊列中的兩個元素 63 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 64 a.clear(); cout<<a.size()<<endl;//a.clear();清除a中的內容 65 a.swap(b);//交換a,b,兩個向量的內容 66 for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl; 67 cout<<b.size(); 68 return 0; 69 }