# C++ `vector` 進階用法 ## **1. `vector` 的擴展與縮減** ### **新增元素:`push_back()`** `push_back()` 會在 `vector` 的最後加入一個元素。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { vector<int> scores = {90, 85, 78}; scores.push_back(95); // 加入新成績 cout << "最後一位玩家的分數: " << scores.back() << endl; return 0; } ``` 輸出: ``` 最後一位玩家的分數: 95 ``` ### **刪除最後一個元素:`pop_back()`** 如果輸入錯誤,可以使用 `pop_back()` 移除最後一個元素。 ```cpp scores.pop_back(); ``` 這樣 `scores` 內的最後一個分數就會被移除。 --- ## **2. 取得 `vector` 的資訊** ### **查看 `vector` 的大小:`size()`** ```cpp cout << "目前共有 " << scores.size() << " 位玩家的分數" << endl; ``` ### **檢查 `vector` 是否為空:`empty()`** ```cpp if (scores.empty()) { cout << "目前沒有任何玩家的分數" << endl; } ``` ### **讀取 `vector` 的第一個與最後一個元素** ```cpp cout << "第一位玩家的分數: " << scores.front() << endl; cout << "最後一位玩家的分數: " << scores.back() << endl; ``` --- ## **3. `vector` 的插入與刪除** ### **指定位置插入:`insert()`** 可以在 `vector` 中的特定位置插入元素,例如在第二個位置插入 `88`。 ```cpp scores.insert(scores.begin() + 1, 88); ``` ### **刪除特定位置的元素:`erase()`** 假設要刪除第三個元素(索引 `2`)。 ```cpp scores.erase(scores.begin() + 2); ``` --- ## **4. `vector` 的遍歷方式** ### **使用 `for` 迴圈遍歷 `vector`** ```cpp for (int i = 0; i < scores.size(); i++) { cout << "玩家 " << i + 1 << " 的分數: " << scores[i] << endl; } ``` ### **使用範圍型 `for` 迴圈** ```cpp for (int score : scores) { cout << "玩家的分數: " << score << endl; } ``` --- ## **5. 清空 `vector` 的所有元素** 如果想要一次清除所有數據,可以使用 `clear()`。 ```cpp scores.clear(); ``` 這樣 `scores` 會變成一個空的 `vector`。 --- ## **6. `vector` 的排序與反轉** ### **排序:`sort()`** ```cpp #include <algorithm> // 需要包含此標頭 sort(scores.begin(), scores.end()); ``` 這樣 `scores` 會從小到大排序。 ### **反轉 `vector` 的順序:`reverse()`** ```cpp reverse(scores.begin(), scores.end()); ``` --- ## **小結** | 操作 | 說明 | 範例 | |------------|-----------------------------|------| | `push_back()` | 新增元素至 `vector` 末尾 | `v.push_back(5);` | | `pop_back()` | 移除 `vector` 最後一個元素 | `v.pop_back();` | | `size()` | 取得 `vector` 的大小 | `v.size();` | | `empty()` | 檢查 `vector` 是否為空 | `v.empty();` | | `front()` / `back()` | 取得 `vector` 的第一個 / 最後一個元素 | `v.front();` / `v.back();` | | `insert()` | 在特定位置插入元素 | `v.insert(v.begin() + 1, 88);` | | `erase()` | 刪除特定位置的元素 | `v.erase(v.begin() + 2);` | | `clear()` | 清空 `vector` | `v.clear();` | | `sort()` | 排序 `vector` | `sort(v.begin(), v.end());` | | `reverse()` | 反轉 `vector` 的順序 | `reverse(v.begin(), v.end());` | --- http://120.101.182.21/d/hd112/p/60 http://120.101.182.21/d/hd112/p/61