vector向量容器(常用的使用方法總結)


關於STL中vector容器的學習,編譯運行后邊看代碼,邊看執行結果效果更佳,還是想說看別人的代碼一百遍,不如自己動手寫一遍。

vector向量容器不但能像數組一樣對元素進行隨機訪問,還能隨時在尾部插入元素,簡單而高效,能夠完全替代數組。

vector最大的亮點在於具有內存自動管理的功能,插入和刪除元素時能夠動態調整所占的內存空間。

值得注意的是,vector容器中的兩個重要方法,begin()返回的是首元素位置的迭代器,end()返回的是最后一個元素的下一個元素位置的迭代器。

  1 //關於STL中vector容器的學習,編譯運行后邊看代碼,邊看執行結果效果更佳,不過看別人的代碼一百遍,不如自己動手寫一遍 
  2 #include <vector>//頭文件
  3 #include <iostream>
  4 #include <algorithm>
  5 using namespace std;
  6 
  7 void print(vector <int> v);
  8 bool mycmpare(const int &a, const int &b){
  9     return a>b;
 10 }
 11 int main ()
 12 {
 13     //創建vector對象三種常用的方式,此處存儲元素類型是int,還可以是double、char、long long等基本數據類型,甚至是string基本字符序列容器 
 14     vector <int> v1;//不指定容器的元素個數的定義一個用來存儲整型的向量容器
 15     cout<<"v1:"<<endl; 
 16     print(v1);
 17     /*運行結果
 18         v1:
 19     大小為:0
 20     */ 
 21     
 22     vector <int> v2(5);//指定容器的元素個數的定義一個大小為10的用來存儲整型的向量容器,默認初始化為0
 23     cout<<"v2:"<<endl;
 24     print(v2);
 25     /*運行結果
 26     v2:
 27     大小為:5
 28     0 0 0 0 0
 29     */
 30     
 31     vector <int> v3(5,1);//也可指定初始值,此處指定為1
 32     cout<<"v3:"<<endl;
 33     print(v3); 
 34     /*運行結果
 35     v3:
 36     大小為:5
 37     1 1 1 1 1
 38     */
 39     
 40     //另外事先指定不指定大小都無所謂,指定了大小也可以隨時使用push_back()對vector容器進行尾部擴張
 41     v1.push_back(1);//向空的vector容器尾部擴張,追加元素為1
 42     cout<<"v1:"<<endl; 
 43     print(v1); 
 44     v3.push_back(2);//向已有元素的vector容器尾部擴張,追加元素為2
 45     cout<<"v3:"<<endl;
 46     print(v3);
 47     /*運行結果
 48     v1:
 49     大小為:1
 50     1
 51     
 52     v3:
 53     大小為:6
 54     1 1 1 1 1 2
 55     */
 56     
 57     //插入元素使用insert()方法,要求插入的位置是迭代器的位置,而不是元素的下標
 58     v3.insert(v3.begin(),3);//在最前面插入3
 59     cout<<"v3:"<<endl;
 60     print(v3);
 61     
 62     v3.insert(v3.end(),3);//在末尾追加3,此處等同於push_back()
 63     cout<<"v3:"<<endl;
 64     print(v3);
 65     /*運行結果
 66     v3:
 67     大小為:7
 68     3 1 1 1 1 1 2
 69     
 70     v3:
 71     大小為:8
 72     3 1 1 1 1 1 2 3
 73     */
 74      
 75     int i;
 76     for(i=0;i < v3.size();i++){//只可賦值到已擴張位置 
 77         v3[i]=i;
 78     }
 79     //要刪除一個元素或者一個區間中的所有元素時使用erase()方法
 80     v3.erase(v3.begin()+2);//刪除第2個元素,從0開始計數
 81     cout<<"v3:"<<endl;
 82     print(v3); 
 83     /*運行結果
 84     v3:
 85     大小為:7
 86     0 1 3 4 5 6 7
 87     */
 88     v3.erase(v3.begin()+1,v3.begin()+3);//刪除第1個到第3個元素區間的所有元素
 89     cout<<"v3:"<<endl;
 90     print(v3);
 91     /*運行結果
 92     v3:
 93     大小為:5
 94     0 4 5 6 7
 95     */
 96     //由結果可知,erase()方法同insert()方法一樣,操作的位置都只是迭代器的位置,而不是元素的下標
 97     
 98     //要想清空vector(),使用clear()方法一次性刪除vector中的所有元素
 99     cout<<"v2:"<<endl;
100     print(v2);
101     /*運行結果
102     v2:
103     大小為:5
104     0 0 0 0 0
105     */
106     v2.clear();
107     if(v2.empty()) cout<<"v2經過使用clear()方法后為空\n"; 
108     print(v2);
109     /*運行結果
110     v2經過使用clear()方法后為空
111     大小為:0
112     */
113     
114     //要想將向量中某段迭代器區間元素反向排列,則使用reverse()反向排列算法,需要添加algorithm頭文件 
115     cout<<"v3反向排列前:"<<endl;
116     print(v3);
117     reverse(v3.begin(),v3.end());//全部反向排列 
118     cout<<"v3反向排列后:"<<endl;
119     print(v3); 
120     /*運行結果
121     v3反向排列前:
122     大小為:5
123     0 4 5 6 7
124     
125     v3反向排列后:
126     大小為:5
127     7 6 5 4 0
128     */
129     
130     //要想將向量中某段迭代器區間元素進行排序,則使用sort()算法
131     cout<<"v3升序排列前:"<<endl;
132     print(v3); 
133     sort(v3.begin(),v3.end());//默認升序排列
134     cout<<"v3升序排列后:"<<endl;
135     print(v3);
136     /*運行結果
137     v3升序排列前:
138     大小為:5
139     7 6 5 4 0
140     
141     v3升序排列后:
142     大小為:5
143     0 4 5 6 7
144     */
145     
146     //自定義排序比較函數,此處降序
147     cout<<"v3降序排列前:"<<endl;
148     print(v3);
149     sort(v3.begin(),v3.end(),mycmpare); 
150     cout<<"v3降序排列后:"<<endl;
151     print(v3);
152     /*運行結果
153     v3降序排列前:
154     大小為:5
155     0 4 5 6 7
156     
157     v3降序排列后:
158     大小為:5
159     7 6 5 4 0
160     */
161 } 
162 
163 void print(vector <int> v) 
164 {
165     //cout<<"下標方式訪問:"<<endl;
166     cout<<"大小為:"<<v.size()<<endl; 
167     int i;
168     for(i=0;i< v.size();i++){
169         cout<<v[i]<<' ';
170     }
171     cout<<endl<<endl;
172     
173     /*cout<<"用迭代器訪問:"<<endl;
174     //定義迭代器變量it,類型與容器元素類型保持一致 
175     vector<int>::iterator it; 
176     for(it=v.begin(); it != v.end(); it++){
177         cout<<*it<<' ';
178     }
179     cout<<endl<<endl;*/
180 }

 


免責聲明!

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



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