【C++ 筆記】陣列(Array) - part 8
===
目錄(Table of Contents):
[TOC]
---
很感謝你點進來這篇文章。
你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!
陣列(Array)
---
陣列(Array),又稱數組,在 Python 中,此種類似的資料結構稱為列表(List),是將一組資料儲存在記憶體的集合。
陣列是一種集合,在 C++ 中只能儲存固定資料型態的元素於陣列中。
在此之前,我們需要了解陣列(Array)、元素(Element)、索引(Index)、資料型態(Data Type)之間的關係。

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 等等,只需要在陣列名稱前加上即可,語法如下:
```cpp=
type arrayName [ arraySize ];
```
type:資料型態
arraysize:指定陣列大小,必須是要 > 0 的整數常數。
具體而言,正常的宣告如下:
```cpp=
int a[10];
```
這是整數型態的陣列 a,大小能夠塞 10 個元素進去,索引為 0 ~ 9。
### 初始化陣列
---
```cpp=
int a[10] = {1,2,3,4,5,6,7,8,9,10};
```
以上定義了一個陣列,並且做出初始化的動作。
那我們也可以不用指定 arraysize,如下:
```cpp=
int a[] = {1,2,3,4,5,6,7,8,9,10};
```
則 C++ 會自動偵測裡面的元素個數,並且制定大小為 10,同上式。
我們也可以為陣列指定值,如下:
```cpp=
a[0] = 2; // 索引 0 的元素被改成2
```
### 存取陣列
---
我們要取得陣列裡面的元素,則如下所示:
```cpp=
a[0];
```
這樣就取得了 a 陣列中,索引 0 的元素了。
所以格式是:`array[index];`
接下來,讓我們練習吧!
```cpp=
#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;
}
```
輸出結果:
```cpp=
陣列中的元素為:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50
陣列元素的總和為:150
陣列中的最大值為:50
陣列中的最小值為:10
```
多維陣列(Multidimesional Arrays)
---
語法:
```cpp=
type name[size1][size2]...[sizeN];
```
多維陣列即陣列裡面還有一個陣列,在那一個陣列裡面,還有更多的陣列,就像永無止盡的盡頭XD。
最簡單的形式是二維陣列:
```cpp=
int a[10][2];
```
### 二維陣列(Two dimensional Arrays)
---
二維陣列可以拿來類比成一個平面(x、y軸),也是一個表格。

Image Source:https://www.geeksforgeeks.org/multidimensional-arrays-in-c/
通常我們都會將二維陣列的形式喻成一個表格的形式,會有欄(C:Columns)、排(Rows)。
一維陣列是一條直線,就如同 1R:1, 2, 3, 4, 5。
二維陣列就是新增了欄位(C),向上、向下延伸陣列出來。
寫成程式碼如下:
```cpp=
int a[3][4] = {
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}
};
```
這是一個 3 * 4 的二維陣列,寫法如同以下:
```cpp=
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
```
如果要存取二維陣列,如同一般的存取方法:
```cpp=
int val = a[2][3]; // 例
```
以下是一範例:
```cpp=
#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
7 8 9
二維陣列中所有元素的總和是:45
```
總結
---
### 陣列的定義
---
陣列是一種資料結構,用於儲存固定數量之相同資料型態的元素。每個元素都有一個索引,C++中的索引從 0 開始,索引(index)意即元素所在位置。陣列的基本語法為:
```cpp=
type arrayName[arraySize];
```
例如,`int a[10];` 定義了一個可以儲存 10 個整數的陣列。
### 陣列的初始化與存取
---
陣列可以在宣告時初始化,例如:
```cpp=
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
```
也可以不指定大小,由編譯器自動推斷。
存取陣列元素時需要使用索引:例如 `a[0];` 取得第一個元素。
### 多維陣列
---
語法:
```cpp=
type name[size1][size2];
```
二維陣列可以視為表格,並且可以使用雙重迴圈來存取和運算其元素。
參考資料
---
[C++ Arrays](https://www.w3schools.com/cpp/cpp_arrays.asp)
[Multidimensional Arrays in C - 2D and 3D Arrays - GeeksforGeeks](https://www.geeksforgeeks.org/multidimensional-arrays-in-c/)
[C++ 数组 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-arrays.html)
[C++ 多维数组 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-multi-dimensional-arrays.html)