位元詩人 [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) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。