C++ vector(STL) 用法與範例
vector
是 C++ 標準模板庫(STL)中的一種動態陣列(dynamic array),能夠根據需要自動調整大小。與傳統陣列不同的是,vector 在建立時不需要預先指定大小,可以在執行期間動態新增或移除元素。
初始化
以 {value1, value2,…} 初始化
- Time Complexity: O(n)
#include <vector>
using namespace std;
vector<int> v = {1, 2, 3};
以特定元素個數初始化
- Time Complexity: O(n)
#include <vector>
using namespace std;
vector<int> v(5); // 初始化一個有5個元素的 vector,元素未賦初值
以特定元素個數帶有特定初始值初始化
- Time Complexity: O(n)
#include <vector>
using namespace std;
vector<int> v(5, 10); // 初始化一個有5個元素的 vector,每個元素的初始值為10
從其他 vector 初始化
- Time Complexity: O(n)
#include <vector>
using namespace std;
vector<int> original = {1, 2, 3, 4, 5};
vector<int> v(original.begin(), original.end()); // 透過拷貝 original vector 的方式初始化
初始化 size 為 (m, n) 的 2D vector
- Time Complexity: O(m * n)
#include <vector>
using namespace std;
vector<vector<int>> v(3, vector<int>(4, 0)); // 初始化一個3行4列的二維 vector,每個元素的初始值為0
取值
取得第 i個元素: v[i]
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
cout << v[0] << "\n"; // 1
使用 .at() 方法安全取值: v.at(i)
- Time Complexity: O(1)
- 檢查索引超出範圍會拋出 out_of_range 異常
vector<int> v = {1, 2, 3};
cout << v.at(2); // 3
取得第一個元素: v.front()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
cout << v.front(); // 1
取得最後一個元素: v.back()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
cout << v.back(); // 3
取得數據指針: v.data()
- Time Complexity: O(1)
- 提供直接訪問 vector 元素的指針
vector<int> v = {1, 2, 3};
int* ptr = v.data();
cout << *ptr; // 1
容量
取得元素個數: v.size()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
cout << v.size(); // 3
檢查 vector 是否為空: v.empty()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
cout << v.empty(); // 0 (false)
取得 vector 的容量: v.capacity()
- Time Complexity: O(1)
- 表示 vector 目前可存放的最大元素數量,可能大於 size()
vector<int> v = {1, 2, 3};
cout << v.capacity(); // 可能是 3 或更大的數字
改變 vector 的大小: v.resize(n)
- Time Complexity: O(n) if the new size is greater than the old size
- 重新設定 vector 的元素個數,多出的元素初始化為0
vector<int> v = {1, 2, 3};
v.resize(5);
cout << v.size(); // 5
保證最小容量: v.reserve(n)
- Time Complexity: O(n) if the new capacity is greater than the current capacity
- 確保 vector 至少可以存放 n 個元素,不影響 size()
vector<int> v = {1, 2, 3};
v.reserve(10);
cout << v.capacity(); // 至少是 10
修改
將元素加到 vector 尾端: v.push_back()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3};
v.push_back(4); // {1, 2, 3, 4}
刪除 vector 尾端的元素: v.pop_back()
- Time Complexity: O(1)
vector<int> v = {1, 2, 3, 4};
v.pop_back(); // {1, 2, 3}
在 vector 中插入元素: v.insert(pos, val)
- Time Complexity: O(n)
pos
是指向 vector 中插入點的迭代器
vector<int> v = {1, 2, 4};
v.insert(v.begin() + 2, 3); // {1, 2, 3, 4}