c++中vector的學習


根據各種做題,發現數組並不是很適用於各種情況,當涉及到內存占用的時候,數組可能就沒有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,但是多學習學習,說不定就用到了呢!

 

每天都要進步一點,積少以成多。。。
 此文轉載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM