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