vector 是 STL 中最常用的順序容器,底層由動態數組實現,支持隨機訪問(下標操作),可存放任意類型元素。與靜態數組不同,vector 會自動管理內存,隨元素插入自動擴容。
size() == capacity() 時再插入元素,會重新分配約 1.5~2 倍的新內存,將舊元素拷貝/移動過去,釋放舊內存。reserve(n) 預分配內存,避免頻繁擴容提升性能。| 操作 | 說明 |
|---|---|
v.size() | 當前元素個數 |
v.capacity() | 已分配容量 |
v.empty() | 是否為空 |
v[i] / v.at(i) | 訪問元素(at 會邊界檢查) |
v.front() / v.back() | 首/尾元素 |
v.push_back(x) | 尾部插入 |
v.pop_back() | 刪除尾部 |
v.insert(pos, x) | pos 前插入 x |
v.erase(pos) / v.erase(beg, end) | 刪除元素 |
v.clear() | 清空 |
v.resize(n) | 調整大小 |
v.reserve(n) | 預留容量 |
v.swap(v2) | 交換內容 |
v.begin() / v.end() | 迭代器 |
v.rbegin() / v.rend() | 反向迭代器 |
vector<int> v1; // 空
vector<int> v2(v1); // 拷貝
vector<int> v3(10); // 10 個默認值
vector<int> v4(10, 5); // 10 個 5
vector<int> v5(arr, arr+5); // 從數組區間構造
vector<int> v6{1,2,3,4,5}; // C++11 列表初始化
for (auto it = v.begin(); it != v.end(); ++it)
cout << *it << ' ';
for (auto &x : v) // C++11 範圍 for
cout << x << ' ';
push_back 前調用 reserve(),避免多次擴容拷貝。vector<int>(v).swap(v) 或 C++11 v.shrink_to_fit()。v[i] 不做邊界檢查,v.at(i) 會拋出異常。pop_back 不減少 capacity,內存不會自動釋放。vector 結合了數組的高效隨機訪問與動態內存管理的靈活性,是 C++ 開發中最基礎也最重要的容器。掌握其擴容機制、迭代器失效規則及優化技巧,能寫出高性能、健壯的代碼。