--- tags: C++教學筆記 --- # 重複結構 ## for迴圈 for-loop 主要是用來處理重複特定「次數」的迴圈 for迴圈的寫法如下: ```cpp for (初始宣告; 條件式; 迭代器變化量) { /*code here*/ } ``` 要注意,間隔三個敘述是使用分號,不是逗號。 迭代器 `iterator` : 指用來遍歷特定範圍的變數, 其中的初始宣告指的也是迭代器的初始宣告。 例如: ```cpp for (int i = 1; i <= 10; i++) cout << i << ' '; cout << endl; ``` 輸出: `1 2 3 4 5 6 7 8 9 10` * c++11的新增寫法: ```cpp for (迭代器 : 執行範圍) { /*code here*/ } ``` 這種寫法的間隔符號是冒號,對執行範圍內的每個單元重複執行。 例如: ```cpp string s; for (char c : s) { /*code here*/ } ``` 可以針對`s`字串中的每個字元重複執行。 且c++11也新增了自動型別 `auto` ,使得這種寫法更為便利,例如: ```cpp map<int, int> myMap; for (map<int, int>::iterator it = myMap.begin(); it != myMap.end(); it++) { /*code here*/ } ``` 可以寫成 ```cpp map<int, int> myMap; for (map<int, int>::iterator it : myMap) { /*code here*/ } ``` 可以再寫成 ```cpp map<int, int> myMap; for (auto it : myMap) { /*code here*/ } ``` 相比第一個看起來簡單非常多吧!而且還更好理解。 (這段範例程式碼有些還沒講過的內容,例如 `map`,之後會再講到) ### 巢狀迴圈 巢狀迴圈就是迴圈內還有一個或一個以上的迴圈,以下為列印三角形的例子: ```cpp for (int i = 0; i < 5; i++){ for (int j = 0; j <= i; j++) cout << "★"; cout << endl; } ``` 輸出結果: ``` ★ ★★ ★★★ ★★★★ ★★★★★ ``` --- ## while迴圈 while-loop 主要是用來處理具有特定「條件」的迴圈, 只要滿足條件式,就進入迴圈,直到不滿足條件才結束。 while迴圈的寫法如下: ```cpp while (條件式) { /*code here*/ } ``` 例如: ```cpp int next; cin >> next; while (next != 0) { //也可以寫成 while (next) ... /*code here*/ cin >> next; } ``` 會一直等待使用者輸入,直到輸入值為0後結束。 --- ## do-while迴圈 與while迴圈基本相同,但是會先執行一次,才開始判斷條件式。 do-while迴圈的寫法如下: ```cpp do { /*code here*/ } while (條件式); ``` 以與while迴圈的範例程式設計出同樣的功能為例: ```cpp int next; do { cin >> next; /*code here*/ } while (next); ``` 看起來更簡潔一些也更好理解對吧! while迴圈與do-while迴圈都有適合的用途,就看使用者怎麼去運用。 在寫程式時要特別注意,for迴圈與while迴圈的後面都不用加分號,但是do-while迴圈需要。 ## 改變迴圈執行 * **continue** `continue`在迴圈中出現時,可以跳過在`coutinue`後方的敘述,並回到迴圈的開頭,執行下一次的迴圈。以上敘述可能比較不好理解,以下舉個例子來說明: ```cpp for (int i = 1; i <= 3; i++){ if (i == 2) continue; cout << i << endl; } ``` 輸出結果: ``` 1 3 ``` 在上述程式碼中,`i`為`2`時,讓他`continue`回到迴圈的起點,執行下一次迴圈,並不會執行當次`if`後面的敘述。 * **break** `break`指令可以直接跳離該迴圈,並繼續執行迴圈外的敘述,在上一章節的選擇結構中,有提到`switch`在每次`case`結束時,都需要`break`出去,以免會繼續往下執行,下面一樣舉一個簡單的例子來說明: ```cpp for(int i = 1; i <= 10000; i++){ if (i == 5) break; cout << i << endl; } ``` 輸出結果: ``` 1 2 3 4 ``` * **goto** `goto`語法不建議使用,除了容易造成程式碼閱讀上的不便,也會容易形成不容易尋找的錯誤,想要知道如何使用請自行Google,可以閱讀知名論文[goto有害論](https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf)原文。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up