vector
可隨時改變長度的陣列!
宣告
1 | vector<int> v; |
這時的 v 是空的,若要宣告大小為 n,可以:
1 | vector<int> v; |
或者:
1 | vector<int> v(n); |
也可以直接:
1 | vector<int> v = {1, 2, 5}; |
填滿
1 | vector<int> v(12,10); |
宣告長度為 12 的 vector,並將值全部設為 10,後面參數沒有傳入的話,預設是 0。
1 | vector<int> v(12); |
使用 fill,並傳入 vector 的頭、尾、以及要填入的值也可以。
尾端加入元素
1 | vector<int> v; |
push_back 與 emplace_back 功能相同,但 emplace_back 速度稍快,push_back 比較好打
移除尾端
1 | vector<int> v; |
前端加入元素
無法
前端移除元素
無法
取得第 k 項
1 | vector<int> v = {1, 2, 3}; |
若索引值超過範圍,會噴 RE。
取得大小
1 | vector<int> v = {1, 2, 3}; |
是否為空
1 | vector<int> v; |
排序
1 | int arr[] = {2, 1, 3, 8, -15}; |
跟陣列相同,但開頭與結尾改為 begin 與 end。
反轉
1 | vector<int> v = {2, 1, 3, 8, -15}; |
意外的常用。
最小元素
1 | vector<int> v = {2, 1, 3, 8, -15}; |
若沒有*,回傳的是位址,可透過減掉 v.begin() 知道最小值所在的 index。
輸出所有 vector 裡的元素
1 | vector<int> v = {1, 3, 2}; |
相信第一種寫法各位已經熟悉。
第二種寫法效果與第一種相同,但短很多,在 vector 等 STL 容器中非常好用,由於它是 C++ 11 以後才有的功能,若無法編譯可能要調整編譯器參數。
使用vector時機
隨時。
當你想在函式內傳入二維陣列時使用 vector,因為一般的二維陣列無法傳入
當你需要很多個一維陣列,但每個陣列長度不一,最大可能很大(ex: 1000000)但不會每個都這麼大,直接開二維陣列記憶體會爆炸。這時就是 vector 的出場時機。
解答:
1 |
|
練習
把之前 array 的練習題,用 vector 去寫寫看吧!