迴圈讓程式重複執行程式碼區塊。C++ 提供多種迴圈型別,適用不同場景。
前測試:先檢查條件,真才執行主體。
while (條件) {
陳述式群;
}
適用:迴圈次數未知、依動態條件決定。
經典三段式:初始化;條件;遞增/遞減。C++11 起支援範圍 for。
for (初始化; 條件; 遞增) {
陳述式群;
}
// 範圍 for (C++11) - 遍歷容器/陣列
for (元素型別 &變數 : 容器) {
陳述式群;
}
範例:
int arr[] = {1,2,3,4,5};
for (int &x : arr) x *= 2; // 修改元素
for (const auto &x : arr) cout << x << ' '; // 唯讀遍歷
後測試:至少執行一次,再檢查條件。
do {
陳述式群;
} while (條件);
適用:選單驅動、至少一次輸入驗證。
迴圈內再包含迴圈,常用於多維資料處理:
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 4; ++j)
cout << '(' << i << ',' << j << ") ";
| 陳述式 | 效果 |
|---|---|
break | 立即跳出最內層迴圈或 switch |
continue | 跳過本次迭代剩餘部分,直接進入下一次條件檢查 |
goto | 無條件跳轉標籤(極度不建議,破壞結構化程式) |
for (int i = 0; i < 10; ++i) {
if (i == 3) continue; // 跳過 3
if (i == 7) break; // 7 結束
cout << i << ' '; // 輸出: 0 1 2 4 5 6
}
條件永真。常見寫法:
for (;;) { ... } // 經典、推薦
while (true) { ... } // 語意明確
用於事件迴圈、伺服器主迴圈。必須有 break/return/throw 退出機制,否則程式掛起。可用 Ctrl+C 強制中斷。
for (size_t i = 0, n = v.size(); i < n; ++i) 快取大小。strlen),預先計算。std::for_each、std::transform 等演算法配合 Lambda 替代手寫迴圈,更具表達力、易平行化 (C++17 std::execution::par)。auto & (修改)、const auto & (唯讀)、auto (複製,小型型別)。掌握 while/for/do-while 三大基本型別、break/continue 控制流、範圍 for (C++11) 現代遍歷語法,並養成優先演算法、避免 goto 的習慣,編寫高效、安全、可讀的迴圈程式碼。