9-2 vector 的基礎操作
vector 基礎操作
1. 引入標頭檔與宣告
使用 vector 前,需要引入標頭檔:
#include <iostream>
#include <vector>
using namespace std;
2. 宣告與初始化
// 方式一:宣告空的 vector
// capacity:0, size: 0
vector<int> v1;
// 方式二:指定初始大小(元素值為 0)
// capacity:5, size: 5
vector<int> v2(5); // [0, 0, 0, 0, 0]
// 方式三:指定大小與預設值
// capacity:5, size: 5
vector<int> v3(5, 100); // [100, 100, 100, 100, 100]
// 方式四:用初始化列表
// capacity:5, size: 5
vector<int> v4 = {3, 1, 4, 1, 5}; // [3, 1, 4, 1, 5]
// 方式五:複製另一個 vector
// capacity:5, size: 5
vector<int> v5(v4); // [3, 1, 4, 1, 5]
// 也可以存其他型別
vector<double> scores;
vector<string> names;
vector<bool> flags;
3. 查詢大小與清空
vector<int> v = {1, 2, 3, 4, 5};
cout << v.size(); // 5:目前元素個數
cout << v.empty(); // 0(false):是否為空
v.clear(); // 清空所有元素
cout << v.size(); // 0
cout << v.empty(); // 1(true)
4. 新增與移除元素
在末尾新增元素
vector 的成員函數 push_back(val),可以將一個值新增到目前 vector 的尾端。
vector<int> v;
v.push_back(10); // [10]
v.push_back(20); // [10, 20]
v.push_back(30); // [10, 20, 30]
移除末尾元素
vector 的成員函數 pop_back(),可以將 vector 尾端的那個元素移除。
v.pop_back(); // [10, 20]
**注意**:對空的 vector 呼叫 pop_back() 是未定義行為(UB),請先確認 !v.empty()。
5. 存取元素
下標運算子 []
vector<int> v = {10, 20, 30};
cout << v[0]; // 輸出 10
v[1] = 99; // 修改第二個元素
帶邊界檢查的存取 at(i)
cout << v.at(0); // 輸出 10
cout << v.at(5); // 超出範圍 → 丟出 std::out_of_range 例外
| 方式 | 速度 | 邊界檢查 | 建議使用時機 |
|---|---|---|---|
v[i] |
較快 | ❌ 沒有 | 確定索引合法時 |
v.at(i) |
稍慢 | ✅ 有 | 需要安全保障時 |
6. 範例:動態收集成績
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> scores;
int n, score;
cout << "請輸入學生人數:";
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "輸入第 " << i + 1 << " 位學生成績:";
cin >> score;
scores.push_back(score); // 動態新增
}
// 計算總分
int total = 0;
for (int i = 0; i < scores.size(); i++) {
total += scores[i];
}
cout << "平均分數:" << (double)total / scores.size() << endl;
return 0;
}