# 11-1 規劃我們的 Vec 類別

## 一、Vec 類別需要什麼？

在這個章節裡，我們嘗試自己建立一個簡單版的 vector，一個叫做 Vec 的類別。

我們至少需要以下三項屬性：

1. `data`: 指向一塊儲存資料的記憶體空間
2. `size`: 記錄目前 Vec 裡的元素數量
3. `capacity`: 記錄目前 Vec 裡己向作業系統要求配置的空間大小

<div drawio-diagram="147"><img src="https://nlmoodle.ddns.net/uploads/images/drawio/2026-06/drawing-1-1780876539.png"></div>

接下來考慮需要對外公開的成員函數。

1. `Vec()`: 建構函數
2. `~Vec()`: 解構函數
3. `size()`: 回傳目前 Vec 裡有幾個元素
4. `capacity()`: 回傳目前 Vec 配置的記憶體大小最多可放幾個元素
5. `push_back(val)`: 將 val 附加在 Vec 的尾端
6. `pop_back()`: 將 Vec 尾端的元素移除

現在我們可以先完成這個類別的原型宣告如下:

**[vec.h]**
```C++
class Vec {
private:
    int *m_data;
    int m_size;
    int m_capacity;
public:
    Vec();
    ~Vec();
    int size();
    int capacity();
    void push_back(int val);
    void pop_back();
};
```

在成員函數的部分，我們使用 m_ 開頭的名稱，一方面用來提醒自己這是個 data member。一方面也是因為 data member 和 member function 不能用相同的名稱，我們不能有一個叫做 size 的 data member，同時又有一個叫做 size 的 member function。

<link rel=stylesheet type="text/css" href="https://nlmoodle.ddns.net/css/h.css?v=20240325001">