# vector(向量) vector是一種動態資料結構(dynamic data structure),不需要事先宣告大小,運用上非常方便。 ## 1. 首先運用vector前要先引入一個標頭檔(header file)#include\<vector>,接著進行宣告。 ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ vector<int> vec; return 0; } ``` ## 2. push_back() 將值加到vector的尾端,pop_back() 將vector尾部的值刪去,vector有自動擴大空間的機制,所以當push_back的時候如果空間不夠裝,vector會自動安排記憶體,但這麼做時間複雜度很高,所以通常在使用前會先預設一些記憶體位置給vector,我們會使用reserve()這個函式。 ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ vector<int> vec; vec.reserve(128); for(int i = 0;i < 10;i++) vec.push_back(i); for(int i = 0;i < vec.size();i++) cout << vec[i] << " ";//ouput = 0 1 2 3 4 5 6 7 8 9 return 0; } ``` ## 3. vector有許多成員函式,使我們在使用vector時可以更方便、更快速,接著要使用insert將資料插入vector的某一個位置 <span style = "color:red">syntax :vec.insert(const_iterator position, const value_type& val)</span> ```cpp= int main(){ vector<int> vec; vec.reserve(128); for(int i = 0;i < 10;i++) vec.push_back(i); vec.insert(vec.begin()+3,1000); for(int i = 0;i < vec.size();i++) cout << vec[i] << " ";//output = 0 1 2 1000 3 4 5 6 7 8 9 return 0; } ``` ## 4. 還有一個函式能幫助我們進行刪除特定位置的資料 <span style = "color:red">syntax :vec.erase (const_iterator position);</span> ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ vector<int> vec; vec.reserve(128); for(int i = 0;i < 10;i++) vec.push_back(i); vec.erase(vec.begin()+1); vec.erase(vec.begin()+3,vec.begin()+6); for(int i = 0;i < vec.size();i++) cout << vec[i] << " ";//output = 0 2 3 7 8 9 return 0; } ``` ## 5. 在C++11時有新的函式emplace_back()、emplace()、emplace_front,emplace相關函式可以減少記憶體拷貝和移動,也就是避免產生臨時變數。 ```cpp= #include <iostream> #include <vector> using namespace std; int main(){ vector<int> vec; for(int i = 0;i < 10;i++) vec.emplace_back(i); vec.emplace(vec.begin()+5,2021); for(int i = 0;i < vec.size();i++) cout << vec[i] << " "; return 0; } ``` ## 6. 其他vector的使用,搭配pair。 ```cpp= #include <iostream> #include <vector> #include <utility> using namespace std; int main(){ vector<pair<int,char>> vec; for(int i = 0;i < 10;i++) vec.emplace_back(make_pair(i,65+i)); for(int i = 0;i < vec.size();i++) cout << vec[i].first << " " << vec[i].second << endl; /*ouput: 0 A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I 9 J */ return 0; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up