【C++ 筆記】陣列(Array) - part 8

很感謝你點進來這篇文章。

你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!

陣列(Array)

陣列(Array),又稱數組,在 Python 中,此種類似的資料結構稱為列表(List),是將一組資料儲存在記憶體的集合。

陣列是一種集合,在 C++ 中只能儲存固定資料型態的元素於陣列中。

在此之前,我們需要了解陣列(Array)、元素(Element)、索引(Index)、資料型態(Data Type)之間的關係。

image

Image Source:https://www.geeksforgeeks.org/cpp-arrays/

以上是陣列的圖示,所謂的元素就像是數列裡面的各個數字一樣,如:{1,2,3,4,5,6},1~6 即為元素。

所謂的索引(Index),就是每個元素的位置,C++ 的陣列索引以 0 為開頭,不是 1 唷。

以上圖而言,元素 2 的索引就是 0,它所在的位置就稱為 0。

至於資料型態,陣列不需要為每個元素加上 int、float 等等,只需要在陣列名稱前加上即可,語法如下:

1
type arrayName [ arraySize ];

type:資料型態
arraysize:指定陣列大小,必須是要 > 0 的整數常數。

具體而言,正常的宣告如下:

1
int a[10];

這是整數型態的陣列 a,大小能夠塞 10 個元素進去,索引為 0 ~ 9。

初始化陣列

1
int a[10] = {1,2,3,4,5,6,7,8,9,10};

以上定義了一個陣列,並且做出初始化的動作。

那我們也可以不用指定 arraysize,如下:

1
int a[] = {1,2,3,4,5,6,7,8,9,10};

則 C++ 會自動偵測裡面的元素個數,並且制定大小為 10,同上式。

我們也可以為陣列指定值,如下:

1
a[0] = 2; // 索引 0 的元素被改成2

存取陣列

我們要取得陣列裡面的元素,則如下所示:

1
a[0];

這樣就取得了 a 陣列中,索引 0 的元素了。

所以格式是:array[index];

接下來,讓我們練習吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;

int main() {
// 1. 初始化陣列
const int SIZE = 5;
int numbers[SIZE] = {10, 20, 30, 40, 50}; // 陣列初始化

// 2. 迴圈輸出陣列元素
cout << "陣列中的元素為:" << endl;
for (int i = 0; i < SIZE; i++) {
cout << "numbers[" << i << "] = " << numbers[i] << endl;
}

// 3. 計算總和
int sum = 0;
for (int i = 0; i < SIZE; i++) {
sum += numbers[i];
}
cout << "陣列元素的總和為:" << sum << endl;

// 4. 找最大值與最小值
int maxVal = numbers[0];
int minVal = numbers[0];
for (int i = 1; i < SIZE; i++) {
if (numbers[i] > maxVal) {
maxVal = numbers[i];
}
if (numbers[i] < minVal) {
minVal = numbers[i];
}
}
cout << "陣列中的最大值為:" << maxVal << endl;
cout << "陣列中的最小值為:" << minVal << endl;

return 0;
}

輸出結果:

1
2
3
4
5
6
7
8
9
陣列中的元素為:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50
陣列元素的總和為:150
陣列中的最大值為:50
陣列中的最小值為:10

多維陣列(Multidimesional Arrays)

語法:

1
type name[size1][size2]...[sizeN];

多維陣列即陣列裡面還有一個陣列,在那一個陣列裡面,還有更多的陣列,就像永無止盡的盡頭XD。

最簡單的形式是二維陣列:

1
int a[10][2];

二維陣列(Two dimensional Arrays)

二維陣列可以拿來類比成一個平面(x、y軸),也是一個表格。

image

Image Source:https://www.geeksforgeeks.org/multidimensional-arrays-in-c/

通常我們都會將二維陣列的形式喻成一個表格的形式,會有欄(C:Columns)、排(Rows)。

一維陣列是一條直線,就如同 1R:1, 2, 3, 4, 5。

二維陣列就是新增了欄位(C),向上、向下延伸陣列出來。

寫成程式碼如下:

1
2
3
4
5
int a[3][4] = {  
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}
};

這是一個 3 * 4 的二維陣列,寫法如同以下:

1
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

如果要存取二維陣列,如同一般的存取方法:

1
int val = a[2][3]; // 例

以下是一範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;

int main() {
// 定義一個固定的 3x3 二維陣列
const int rows = 3;
const int cols = 3;
int array[rows][cols] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

// 輸出二維陣列
cout << "二維陣列的內容是:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << array[i][j] << "\t";
}
cout << endl;
}

// 計算二維陣列中所有元素的總和
int sum = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
sum += array[i][j];
}
}

// 輸出總和
cout << "\n二維陣列中所有元素的總和是:" << sum << endl;

return 0;
}

輸出結果:

1
2
3
4
5
6
二維陣列的內容是:
1 2 3
4 5 6
7 8 9

二維陣列中所有元素的總和是:45

總結

陣列的定義

陣列是一種資料結構,用於儲存固定數量之相同資料型態的元素。每個元素都有一個索引,C++中的索引從 0 開始,索引(index)意即元素所在位置。陣列的基本語法為:

1
type arrayName[arraySize];

例如,int a[10]; 定義了一個可以儲存 10 個整數的陣列。

陣列的初始化與存取

陣列可以在宣告時初始化,例如:

1
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

也可以不指定大小,由編譯器自動推斷。

存取陣列元素時需要使用索引:例如 a[0]; 取得第一個元素。

多維陣列

語法:

1
type name[size1][size2];

二維陣列可以視為表格,並且可以使用雙重迴圈來存取和運算其元素。

參考資料

C++ Arrays

Multidimensional Arrays in C - 2D and 3D Arrays - GeeksforGeeks

C++ 数组 | 菜鸟教程

C++ 多维数组 | 菜鸟教程