# 範圍型 `for` 迴圈
## **1. 什麼是範圍型 `for` 迴圈?**
範圍型 `for` 迴圈(Range-based for loop)是 C++11 引入的語法,讓遍歷**陣列**或**容器**(如 `vector`、`map`)變得easy許多。
## **2. 基本語法**
```cpp
for (elementType variable : container) {
// 迴圈內部操作
}
```
- `elementType`:元素的類型。如 `int a[10];` 的 `int`
- `variable`:每次迴圈會取得容器內的一個元素。就是一個空變數
- `container`:需要遍歷的容器(如陣列、`vector`)。
容器的**指標**(這裡各位可能會不理解,但是別緊張,pointers講義中會詳細介紹)
## **3. 範例:遍歷Array(陣列)**
```cpp=
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5};
for (int i : arr) {
cout << i << " ";
}
return 0;
}
```
**輸出:**
```
1 2 3 4 5
```
## **4. 遍歷 `vector`**
```cpp=
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {10, 20, 30, 40, 50};
for (int num : vec) {
cout << num << " ";
}
return 0;
}
```
**輸出:**
```
10 20 30 40 50
```
## **5. 使用 `&` 來修改元素**
這是 `reference`,其實我在思考要不要把這篇放到 `pointers`
```cpp=
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
for (int &num : vec) {
num *= 2;
}
for (int num : vec) {
cout << num << " ";
}
return 0;
}
```
**輸出:**
```
2 4 6 8 10
```
## **6. 使用 `const` 保持唯讀**
```cpp=
for (const int &num : vec) {
cout << num << " ";
}
```
這樣 `num` 只能讀取數值,**不能修改**。
之前有提到在變數宣告時加上 `const` 就表示該變數不能修改,這裡也是一樣的道理。
## **7. 適用於 `map`**
可以去看看 `map` 的講義喔!!
```cpp=
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> scores = { {"Alice", 90}, {"Bob", 85}, {"Charlie", 95} };
for (const auto &pair : scores) {
cout << pair.first << ": " << pair.second << endl;
}
return 0;
}
```
`auto` 是一種自動判別資料型態的東東,適合用於很多地方。
**輸出:**
```
Alice: 90
Bob: 85
Charlie: 95
```
## 小結
這些就是他運作的原理和範例,其實我在思考要不要把它擺到指標後面....