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;
}

