根據各種做題,發現數組並不是很適用於各種情況,當涉及到內存占用的時候,數組可能就沒有vector的優勢了,而vector,動態數組,比較適合某些情況。
接下來看看比較基本的vector用法:
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 int main() 6 { 7 int i; 8 int A[10]={9,5,8,6,4,2,3,7,0,1}; 9 vector<int> V; 10 11 for(i=0;i<10;i++) 12 { 13 V.push_back(A[i]); 14 } 15 16 vector<int>::iterator it; 17 for(it=V.begin();it!=V.end();it++) 18 { 19 cout<<*it<<endl; 20 } 21 22 return 0; 23 }
這里還用了一個迭代器訪問元素。
注意點:
1,引用頭文件:#include<vector>
2,創建vector 對象 : vector<int> V;
3,尾插元素: V.push_back(a[i]);
4,插入元素: V.insert(V.begin()+i,a); //在第i+1個元素前面插入a
5,刪除元素:vec.erase(vec.begin()+i); //刪除第i+1個元素
6,求vector的長度:V.size();
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 int i; 9 int A[10]={9,5,8,6,4,2,3,7,0,1}; 10 vector<int> V; 11 12 for(i=0;i<10;i++) 13 { 14 V.push_back(A[i]); 15 } 16 17 sort(V.begin(),V.end());//排序方法 18 19 vector<int>::iterator it; 20 for(it=V.begin();it!=V.end();it++) 21 { 22 cout<<*it<<" "; 23 } 24 25 return 0; 26 }
在這個基礎上,加上 頭文件#include<algorithm> 中的sort() 方法,就可以得出排序好了的
這種是升序的,降序的話,sort(vec.begin(),vec.end(),Comp),這樣就降序排序。
百度的Comp:
bool Comp(const int &a,const int &b) { return a>b; }
主要是以前雖然學過vector,但並沒有真正去理解它,以后遇到一些數組處理不過來的問題,會嘗試着利用vector的。
在PAT中,也有這種題目,我自己編譯的話,主要的問題就是段問題,超哥說問題在於我的數組,之前曾寫過各種排序算法的性能分析,當時由於想要看到時間,所以定義了一個二維數組,都很大int A[100][1000],記得只能寫成這個樣子,不然就不能運行了。所以,同理,可能這就是動態數組的好處,只是當時不能熟練地去利用vector這個容器。
下面來看PAT中的題目:
鏈接:https://www.patest.cn/contests/pat-b-practise/1015
這個題目要求的范圍也比較大,動態數組用起來就很方便了。
因為我用的是數組,然后邏輯,就是比較排序出了一點點問題,然后就百度了看看:
1 #include<vector> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 6 struct student 7 { 8 int kaohao; 9 int defen; 10 int caifen; 11 int zongfen; 12 }; 13 14 bool compare(student a,student b) //比較a在b前則返回true,表示a在b前面 15 { 16 if(a.zongfen>b.zongfen) 17 return true; 18 else if(a.zongfen == b.zongfen) 19 { 20 if(a.defen>b.defen) 21 return true; 22 else if(a.defen==b.defen) 23 { 24 if(a.kaohao<b.kaohao) 25 return true; 26 } 27 } 28 return false; 29 } 30 31 int main() 32 { 33 vector<student> v1,v2,v3,v4;//表示四類考生 34 student stu;//學生信息臨時保存 35 int count=0;//達標的學生總數 36 int N,L,H; 37 38 //cin>>N>>L>>H; 39 scanf("%d %d %d",&N,&L,&H); 40 int K,D,C; 41 while(N--) 42 { 43 //cin>>K>>D>>C; 44 scanf("%d%d%d",&K,&D,&C); 45 stu.kaohao = K; 46 stu.defen = D; 47 stu.caifen = C; 48 stu.zongfen = D+C; 49 if(D>=L && C>=L) 50 { 51 count++; 52 if(D>=H && C>=H) 53 v1.push_back(stu); 54 else if(D>=H && C<H ) 55 v2.push_back(stu); 56 else if(D<H && C<H && D>=C) 57 v3.push_back(stu); 58 else 59 v4.push_back(stu); 60 } 61 62 } 63 printf("%d\n",count); 64 sort(v1.begin(),v1.end(),compare); 65 sort(v2.begin(),v2.end(),compare); 66 sort(v3.begin(),v3.end(),compare); 67 sort(v4.begin(),v4.end(),compare); 68 69 vector<student>::iterator itr; 70 for(itr=v1.begin();itr!=v1.end();itr++) 71 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 72 for(itr=v2.begin();itr!=v2.end();itr++) 73 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 74 for(itr=v3.begin();itr!=v3.end();itr++) 75 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 76 for(itr=v4.begin();itr!=v4.end();itr++) 77 printf("%d %d %d\n",itr->kaohao,itr->defen,itr->caifen); 78 79 system("pause"); 80 return 0; 81 }
做這個題,我真的是花費了好長的時間,最后排序的時候,邏輯還出現了一點狀況,導致后來實在是沒有辦法繼續堅持下去。。。。所以再做一個題的時候,先思考清楚,再做題才是明智的。
也有可能以后不怎么用vector,但是多學習學習,說不定就用到了呢!