---
# System prepended metadata

title: C++_範圍型for_loop

---

# 範圍型 `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
```

## 小結
這些就是他運作的原理和範例，其實我在思考要不要把它擺到指標後面....