9-1 vector

1. 為什麼需要 vector?

1.1 傳統陣列的限制

在 C++ 中,我們熟悉的傳統陣列有一個根本的問題:大小必須在編譯時決定,且無法改變

int scores[100];   // 固定 100 格,多了浪費,少了不夠用

傳統陣列的痛點:

// 傳統做法:又長又容易出錯
int* scores = new int[100];  // 動態跟作業系統要一塊記憶體
int count = 0;

scores[count++] = 90;  // 注意這裡的 count++,count 值先被評估,再遞增 1
scores[count++] = 85;

cout << "We have " << count << " items in scores[]" << endl;

for(int i=0; i<count; i++)
{
    cout << "scores[" << i << "] = " << scores[i] << endl;
}

// 用完還要記得把記憶體還作業系統
delete[] scores;

1.2 vector 是什麼?

vector 是 C++ 標準模板庫(STL) 中的一種動態陣列容器

它的核心優勢:

1.3 圖解:記憶體動態擴張

初始狀態(capacity = 1):
┌───┐
│ 3 │
└───┘
  size=1, capacity=1

push_back(7),空間不足 → 自動擴張為 capacity=2:
┌───┬───┐
│ 3 │ 7 │
└───┴───┘
  size=2, capacity=2

push_back(5),空間不足 → 自動擴張為 capacity=4:
┌───┬───┬───┬───┐
│ 3 │ 7 │ 5 │   │
└───┴───┴───┴───┘
  size=3, capacity=4(預留空間)

push_back(1),空間足夠 → 直接寫入:
┌───┬───┬───┬───┐
│ 3 │ 7 │ 5 │ 1 │
└───┴───┴───┴───┘
  size=4, capacity=4

重點:size 是目前元素數量,capacity 是已分配的記憶體空間。vector 通常以倍增方式擴張,以攤平擴張的成本。


Revision #6
Created 26 April 2026 11:44:09 by huihui
Updated 27 April 2026 07:01:30 by huihui