前言
陣列 (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;
}