vector<T>:動態陣列,連續內存,支持隨機訪問,尾部增刪 O(1) 攤還,中間增刪 O(n)。
頭文件:#include <vector>,命名空間 std。
vectorv1; // 空 vector v2(10); // 10 個 0 vector v3(10, 5); // 10 個 5 vector v4(v3); // 拷貝構造 vector v5(v3.begin(), v3.begin()+3); // 區間構造 vector v6 = {1,2,3,4,5}; // C++11 列表初始化
| 函數 | 功能 | 複雜度 |
|---|---|---|
push_back(val) | 尾部插入 | O(1) 攤還 |
pop_back() | 刪除尾部 | O(1) |
insert(pos, val) | pos 前插入 | O(n) |
erase(pos) | 刪除 pos | O(n) |
erase(beg, end) | 刪除區間 | O(n) |
clear() | 清空 | O(n) |
size() | 元素數 | O(1) |
capacity() | 已分配容量 | O(1) |
reserve(n) | 預留容量,避免重複擴容 | O(n) |
resize(n, val) | 調整大小,不足填 val | O(n) |
front()/back() | 首/尾元素引用 | O(1) |
at(i) | 帶邊界檢查訪問 | O(1) |
operator[i] | 無檢查訪問 | O(1) |
begin()/end() | 迭代器 | O(1) |
rbegin()/rend() | 反向迭代器 | O(1) |
swap(v) | 交換內容 | O(1) |
assign(beg, end) | 區間賦值 | O(n) |
assign(n, val) | n 個 val 賦值 | O(n) |
at() vs []vectorv = {1,2,3}; v.at(3); // 拋出 out_of_range v[3]; // 未定義行為(不檢查) // 推薦調試用 at(),發布可用 [] 提速
#includevector v = {1,2,3,4,5,2,6}; v.erase(remove(v.begin(), v.end(), 2), v.end()); // 刪除所有 2 // remove 將不刪元素前移,返回新邏輯末尾,erase 物理刪除尾部垃圾
push_back/insert/erase/resize/reserve 可能導致**所有**迭代器失效(內存重新分配)。erase 返回下一有效迭代器,可安全繼續遍歷。reserve() 避免多次擴容拷貝。deque 或 list。vector<unique_ptr<T>> 避免拷貝開銷。