# C++ 陣列
這篇教學將教你使用`vector`標準庫來創建、寫入、讀取陣列
## 1.1 一維陣列
在C++中我們使用以下程式創建一個有10個空格的一維數字陣列
```cpp=
#include <iostream>
#include <vector> //引入vector標準庫
using namespace std;
int main() {
vector<int> list(10); //list只是名字
//跟定義變數一樣,只是改成用vector<int>定義陣列
}
}
```
接著讓我們先把每個空格都填上數字1
```cpp=
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> list(10, 1); //在這個跨號中可以把預設數字寫上
}
```
如果你想讓你自己輸入~~
```
範例輸入:
1 3 5 2 7 2 5 2 8 2
```
```cpp=
#include <iostream>
#include <vector>
using namespace std;
int main() {
int temp; //創建一個暫存變數
vector<int> list(10);
for (int i = 0; i < 10; i++){
cin >> temp; //C++的輸入不用寫分割
list[i] = temp;
}
}
```
同時我們一定也需要知道陣列中的數值吧,我以我們會~~
```cpp=
#include <iostream>
#include <vector>
using namespace std;
int main() {
int temp;
vector<int> list(10, 1);
for (int i = 0; i < 10; i++){
cin >> temp;
list[i] = temp;
}
for (int i = 0; i < 10; i++){
cout << list[i] << " ";// 用for迴圈輸出
}
}
```
### 小練習
給定一個一維陣列,其中包含了學生的成績(整數),請編寫一個C++程式,計算並輸出這些學生成績的平均值。假設陣列中至少有一個成績,並且所有成績都是正整數。
```
範例輸入:
5
90 85 92 88 76
```
```
範例輸出:
86.2
```
---
## 二維陣列
在C++中,我們可以使用`vector`來創建二維陣列。二維陣列可以被視為"陣列的陣列",這讓我們可以存儲表格形式的數據。
### 創建二維陣列
首先,讓我們來看如何創建一個二維陣列。以下示例創建了一個5行4列的二維陣列,並將所有元素初始化為0。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 創建一個5行4列的二維陣列,初始化為0
vector<vector<int>> matrix(5, vector<int>(4, 0));
}
```
### 寫入二維陣列
如果我們想要修改或寫入二維陣列的數據,可以使用雙重`for`迴圈來達成。例如,將上面創建的二維陣列中的所有元素設置為其行索引與列索引之和:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<vector<int>> matrix(5, vector<int>(4, 0));
for (int i = 0; i < matrix.size(); i++) { // 遍歷行
for (int j = 0; j < matrix[i].size(); j++) { // 遍歷列
matrix[i][j] = i + j; // 設置元素值為行索引與列索引之和
}
}
}
```
### 讀取二維陣列
讀取二維陣列的元素也是使用雙重`for`迴圈。以下代碼片段將遍歷上面創建的二維陣列,並打印出所有元素:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<vector<int>> matrix(5, vector<int>(4, 0));
// 假設matrix已被填充數據
for (int i = 0; i < matrix.size(); i++) { // 遍歷行
for (int j = 0; j < matrix[i].size(); j++) { // 遍歷列
cout << matrix[i][j] << " ";
}
cout << endl; // 每輸出完一行後換行
}
}
```
### 小練習
給定一個二維陣列,其中包含了班級中每位學生的成績(整數),每行代表一位學生的成績。請編寫一個C++程式,計算並輸出每位學生成績的平均值,以及所有學生的總平均成績。
假設每位學生都至少有一門成績,並且所有成績都是正整數。此外,輸入的第一行為學生人數,隨後的每一行代表一位學生的成績,成績之間以空格分隔。
```
範例輸入:
3
90 85 92
88 76 84
95 92 89
範例輸出:
學生1平均成績:89
學生2平均成績:82.6667
學生3平均成績:92
總平均成績:87.8889
```