Skip to main content

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