###### tags: `FoShiShi` # 陣列 ## What 陣列就是 **一排的格子,裡面存著資料** :::success 就想像是 **一排箱子** **每個箱子都裝了一顆球** 總共有`N`箱子,編號從`0 ~ N-1` ::: 通常需要搭配[**`迴圈`**](https://chrislaiisme.github.io/FoShiShi/loop)使用 --- ## When 當要去儲存一些 **有絕對位置關係** 的東西的時候 例:表格 你不會想要寫這種東西的: ```cpp= int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; cin >> a1 >> a2 >> a3 >> a4 >> a5 >> a6 >> a7 >> a8 >> a9 >> a10; ... ``` 所以這種時候我們需要陣列 --- ## How ### 一維陣列 就是一列的格子,裡面可以存各種資料 :::warning 陣列中存的東西的 **型態要一樣** ::: ![](https://i.imgur.com/45n9e42.png) :::warning 陣列的 **引入值從`0`開始** ::: #### 宣告 ```cpp= 資料型態 陣列名稱[陣列長度]; ``` 其中陣列長度必須是 **已知的數** ,因為陣列的長度是個固定的值 ### 引用陣列中數值 ```cpp= 陣列名稱[位置]; ``` 其中要引用的位置(`pos`)必須在符合`0 <= pos < 陣列長度` :::warning 陣列 **不能夠直接輸入/輸出** 也就是 ```cpp= int arr[5]; cin >> arr; ``` 是不合法的 必須要 ```cpp= int arr[5]; for(LL i = 0; i < 5; i ++ ) { cin >> arr[i]; } ``` 才合法 ::: --- ### 多維陣列 可以是一個表格(二維)、方體(三維)、或更多維空間(>三維) 其實就是很多個一維陣列 下面是一個二維陣列 ![](https://i.imgur.com/3Fg6dVD.png) #### 宣告 ```cpp= 資料型態 陣列名稱[第1維長度][第2維長度]....[第n維長度]; ``` 要注意的東西跟一維陣列一樣 #### 引用 ```cpp= 陣列名稱[第1維位置][第2維位置]....[第n維位置]; // 0 <= 第i維位置 <= 第i維長度 - 1 ``` 要注意的東西跟一維陣列一樣 --- ## 實際應用 ### 題目1 輸入一數`N` 然後輸入`N`個數字,請反過來後輸出 :::spoiler solution 可以用陣列,搭配迴圈來輸入輸出這些值 ```cpp= #include<iostream> using namespace std; int main() { int N; cin >> N; int arr[N]; for(int i = 0; i < N; i ++ ) { cin >> arr[i]; } for(int i = N - 1; i >= 0; i -- ) { cout << arr[i] << " "; } cout << endl; } ``` ::: ### 題目2 輸入兩數`N, M` 然後輸入`N * M`個數字的二維表格,請上下左右翻轉輸出 :::spoiler solution 可以用二維陣列,搭配兩層迴圈來輸入輸出這些值 ```cpp= #include<iostream> using namespace std; int main() { int N, M; cin >> N >> M; int arr[N][M]; for(int i = 0; i < N; i ++ ) { for(LL j = 0; j < M; j ++ ) { cin >> arr[i][j]; } } for(int i = N - 1; i >= 0; i -- ) { for(LL j = M - 1; j >= 0; j -- ) { cout << arr[i][j] << " "; } cout << endl; } } ``` :::