1. 程式人生 > >vector向量容器(常用的使用方法總結)

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

不但 追加 begin vector for 一個 添加 tor 初始化

關於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 }

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