位元詩人 [C++] 程式設計教學:C 陣列 (Array)

C++陣列
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

陣列 (array) 是一種連續、線性的容器,主要的優勢在於隨機存取的時間為 O(1) (常數時間)。在 C++ 中有三種陣列:

  • C 陣列
  • std::array 物件 (C++11)
  • std::vector 物件

在這三種陣列中,前兩者為固定大小陣列,而 std::vector 則為可變動大小的動態陣列。本文介紹 C 陣列。

建立陣列

以下敘述建立整數型態的陣列實字 arr

int arr[5] = {3, 4, 5, 6, 7};

陣列實字的元素數量可由值推論出來,故可省略:

int arr[] = {3, 4, 5, 6, 7};

也可以用新的語法來初始化陣列 (C++11):

int arr[] {3, 4, 5, 6, 7};

存取陣列元素

C 陣列使用非負整數做為索引 (index) 來存取元素 (element)。以下是實例:

#include <cassert>

int main(void)
{
    int arr[] {3, 4, 5, 6, 7};

    assert(arr[0] == 3);
    assert(arr[2] == 5);
    assert(arr[4] == 7);

    arr[2] = 99;

    assert(arr[0] == 3);
    assert(arr[2] == 99);
    assert(arr[4] == 7);

    return 0;
}

注意 C 陣列單純是一塊連續的記憶體,沒有邊界檢查的功能。程式設計者在使用 C 陣列時要自行確認是否有超出邊界。

走訪陣列

在 C++ 中,有兩種走訪 C 陣列的方式。使用計數器來走訪是承自 C 語言就有的方式:

#include <cassert>
#include <cstddef>
#include <iostream>

int main(void)
{
    int arr[] {3, 4, 5, 6, 7};

    for (size_t i = 0; i < 5; i++) {
        std::cout << arr[i] << std::endl;
    }

    return 0;
}

除了使用計數器,在 C++ 還可以用隱式迭代器來走訪:

#include <cassert>
#include <iostream>

int main(void)
{
    int arr[] {3, 4, 5, 6, 7};

    for (auto i : arr) {
        std::cout << i << std::endl;
    }

    return 0;
}
關於作者

位元詩人 (ByteBard) 是資訊領域碩士,專注於從原型到產品的開發過程,並以工具驅動的方式持續探索技術。喜歡以開源專案作為成果,回饋社群。

主要方向包括:自用工具的打磨 (dogfooding)、編譯器前端在工具開發中的應用,以及將研究與實驗轉化為可維護的開源成果。

除了技術之外,也喜歡日本料理和黑咖啡,偶爾自助旅行,將生活中的靈感融入技術隨筆。