1 vector是啥玩意ios
(1)可使用下標訪問個別的元素數組
(2)迭代器能夠按照不一樣的方式遍歷ide
(3)能夠在容器的末尾增長或者刪除元素性能
2 容器大小和容器的容量區別測試
(1)大小是元素的個數,容量是分配的內存大小。vector::size()容器的大小 vecto::capacity返回容器值。spa
(2)每次從新分配內存都會影響程序的性能,因此通常分配的容量都打羽容器的大小。code
3 vector中各類初始化方法對象
1 #include <vector> 2 #include <iostream> 3 using namespace std; 4 int main(){ 5 int a[7]={1,2,3,4,5,6,7}; 6 vector<int> ivector(a,a+7);/*vector的賦值並不能夠像數組同樣方便的用花括號方便 的完成賦值,這裏借用了數組來初始化這個vector 7 初始化方式vector<elementType> intvec(begin,end);這樣能夠用起來看上去仍是比較習慣的。*/ 8 vector<int>::iterator iter; 9 for (iter=ivector.begin();iter!=ivector.end();iter++){ 10 cout<<*iter<<" "; 11 } 12 cout<<endl; 13 ivector[5]=1; 14 /*單個vector的賦值,這個方式看上去仍是和數組同樣的 15 也能夠這麼寫ivector.at(5)=1;可是就是不習慣 */ 16 cout<<ivector[5]<<endl<<ivector.size()<<endl; 17 for (iter=ivector.begin();iter!=ivector.end();iter++){ 18 cout<<*iter<<" "; 19 } 20 cout<<endl; 21 for(int i=0;i<5;i++){ 22 cout<<ivector[i]<<" "; 23 } 24 cout<<endl; 25 return 0; 26 }
foreach用法:blog
1 #include <vector> 2 #include <algorithm> 3 #include <iostream> 4 using namespace std; 5 6 void print(int n) 7 { 8 cout<<n<<" "; 9 } 10 11 int main(){ 12 int a[7]={1,2,3,4,5,6,7}; 13 vector<int> ivector(a,a+7); 14 vector<int>::iterator iter; 15 for_each(ivector.begin(),ivector.end(),print);//用for_each進行遍歷 16 cout<<endl; 17 ivector[5]=1; 18 cout<<ivector[5]<<endl<<ivector.size()<<endl; 19 for_each(ivector.begin(),ivector.end(),print);//用for_each進行遍歷 20 return 0; 21 }
vector中存入結構體並且排序,不會自動排序排序
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 6 typedef struct rect{ 7 int id; 8 int length; 9 int width; 10 //重載<運算符 11 bool operator< (const rect &a) const{ 12 if(id!=a.id) 13 return id<a.id; 14 else{ 15 if(length!=a.length) 16 return length<a.length; 17 else 18 return width<a.width; 19 } 20 } 21 }Rect; 22 23 int main(){ 24 vector<Rect> vec;//vector存入結構體 25 //初始化 26 Rect rect; 27 rect.id=2; 28 rect.length=3; 29 rect.width=4; 30 //存入vector中 31 vec.push_back(rect); 32 33 rect.id=1; 34 rect.length=2; 35 rect.width=3; 36 vec.push_back(rect); 37 //進行輸出 38 vector<Rect>::iterator it=vec.begin(); 39 cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; 40 sort(vec.begin(),vec.end()); 41 cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; 42 return 0; 43 }
vector中的查找
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 vector<int> vec; 7 vec.push_back(1); 8 vec.push_back(2); 9 vec.push_back(3); 10 vec.push_back(4); 11 vec.push_back(5); 12 //進行查找 13 vector<int>::iterator iter=find(vec.begin(),vec.end(),3); 14 if ( iter==vec.end()) 15 cout << "Not found" << endl; 16 else 17 cout << "Found" << endl; 18 return 0; 19 }
vector中的刪除
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 vector<int> vec; 7 vec.push_back(1); 8 vec.push_back(2); 9 vec.push_back(3); 10 vec.push_back(4); 11 vec.push_back(5); 12 vector<int>::iterator iter=vec.begin(); 13 for(;iter!=vec.end();){ 14 if(*iter==3){ 15 //這裏注意返回是迭代器哦 16 iter=vec.erase(iter); 17 }else{ 18 ++iter; 19 } 20 } 21 for(iter=vec.begin();iter!=vec.end();iter++){ 22 cout<<*iter<<" "; 23 } 24 return 0; 25 }
4 vector的內存管理與效率
關於STL容器,只要超過設置的最大值就會自動增加到足以容納用戶放進入的數據大小。
(1)內部採用動態數組方式實現。
(2)注意了,經過reverse申請特定大小的內存空間的時候老是按照指數邊界來增大內部緩衝區。
當進行插入等操做的時候,若是內存不夠用,這個時候會從新分配1.5-2倍的新內存空間,而後將內容複製過去。這個時候性能的確就會降低。
(3)使用「交換技巧」來修整vector過剩空間。也就是把它曾經最大的容量減小到它如今須要的容量。
vector<int>(ivec).swap(ivec).
(4)使用swap方法強行釋放vector所佔內存
例子
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main(){ 5 vector<int> iVec; 6 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 7 8 /*1個元素,容器容量爲1*/ 9 iVec.push_back(1); 10 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 11 12 /*2個元素,容器容量爲2*/ 13 iVec.push_back(2); 14 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 15 16 /*3個元素,容器容量爲4*/ 17 iVec.push_back(3); 18 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 19 20 /*4個元素,容器容量爲4*/ 21 iVec.push_back(4); 22 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 23 24 /*5個元素,容器容量爲8*/ 25 iVec.push_back(5); 26 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 27 28 /*6個元素,容器容量爲8*/ 29 iVec.push_back(6); 30 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 31 32 /*7個元素,容器容量爲8*/ 33 iVec.push_back(7); 34 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 35 36 /*8個元素, 容器容量爲8*/ 37 iVec.push_back(8); 38 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 39 40 /*9個元素, 容器容量爲16*/ 41 iVec.push_back(9); 42 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 43 44 /* vs2005/8 容量增加不是翻倍的,如 45 9個元素 容量9 46 10個元素 容量13 */ 47 48 /* 測試effective stl中的特殊的交換 swap() */ 49 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 50 vector<int>(iVec).swap(iVec); 51 52 cout<<"臨時的vector<int>對象的大小爲:"<<(vector<int>(iVec)).size()<<endl; 53 cout<<"臨時的vector<int>對象的容量爲: " <<(vector<int>(iVec)).capacity()<<endl; 54 cout<<"交換後,當前vector的大小爲:"<<iVec.size()<<endl; 55 cout<<"交換後,當前vector的容量爲:"<< iVec.capacity()<<endl; 56 57 return 0; 58 }
最後這裏有點彆扭,後面再看看。。。。加油騷年。。。。