O(1))。O(1),中間插入/刪除 O(n)。sort、find、accumulate 等)。| 操作 | 代碼範例 | 說明 |
|---|---|---|
| 構造 | vector<int> v; / vector<int> v(10, 0); | 默認空 / 10 個 0 |
| 尾部插入 | v.push_back(42); | 攤還常數時間 |
| 尾部刪除 | v.pop_back(); | 不返回值 |
| 隨機存取 | v[i] / v.at(i) | at 會邊界檢查 |
| 大小/容量 | v.size() / v.capacity() | 元素數 / 已分配空間 |
| 清空 | v.clear(); | 釋放元素,保留容量 |
| 預留空間 | v.reserve(1000); | 避免頻繁擴容 |
| 迭代器遍歷 | for (auto it=v.begin(); it!=v.end(); ++it) | 支援範圍 for:for (auto& x : v) |
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
for (int i = 0; i < 10; ++i) v.push_back(i * 2);
// 方式 1:下標
for (size_t i = 0; i < v.size(); ++i)
cout << v[i] << ' ';
cout << '\n';
// 方式 2:迭代器
for (auto it = v.begin(); it != v.end(); ++it)
cout << *it << ' ';
cout << '\n';
// 方式 3:範圍 for (C++11)
for (auto& val : v) val *= 2; // 修改元素
for (auto val : v) cout << val << ' ';
cout << '\n';
return 0;
}
// 10 行,每行初始為空 vector
vector< vector<int> > matrix(10, vector<int>());
for (int r = 0; r < 10; ++r) {
for (int c = 0; c < 9; ++c)
matrix[r].push_back(c * r); // 每行長度可不同
}
int rows = 10, cols = 9;
vector< vector<int> > matrix(rows, vector<int>(cols, 0)); // 全 0 初始化
for (int r = 0; r < rows; ++r)
for (int c = 0; c < cols; ++c)
matrix[r][c] = r * c;
vector< vector<int> > matrix;
vector<int> row;
for (int r = 0; r < 10; ++r) {
matrix.push_back(row); // 先推入空行
for (int c = 0; c < 9; ++c)
matrix[r].push_back(c); // 再填充該行
}
for (size_t r = 0; r < matrix.size(); ++r) {
for (size_t c = 0; c < matrix[r].size(); ++c)
cout << matrix[r][c] << ' ';
cout << '\n';
}
// 或範圍 for (C++11)
for (auto& row : matrix) {
for (auto val : row) cout << val << ' ';
cout << '\n';
}
vector 保證單行連續,但不同行之間不連續。需傳給 C API 時,逐行 &row[0] 處理。reserve 或構造函數指定初始大小。vector<int>().swap(v); 可真正歸還記憶體給 OS(C++11 後 shrink_to_fit() 同效)。const vector<vector<T>>& 避免拷貝。std::array 或原生陣列。vector<vector<T>> 靈活但記憶體碎片化。Eigen、Blaze 或單維 vector 手動計算索引(idx = r * cols + c),緩存友好。熟練掌握 vector 及其多維變體,是 C++ 開發處理動態集合、矩陣運算、圖算法等場景的基石。善用 C++11/14/17 新特性(範圍 for、結構化綁定、emplace_back)可大幅提升代碼可讀性與性能。