對於迴圈
for
迴圈在 loop body
中執行語句,而迴圈 condition
為 true。迴圈之前 initialization statement
只執行一次。每個迴圈後,執行 iteration execution
部分。
for
迴圈定義如下:
for (/*initialization statement*/; /*condition*/; /*iteration execution*/)
{
// body of the loop
}
佔位符語句的說明:
initialization statement
:此語句僅在for
迴圈開始時執行一次。你可以輸入一種型別的多個變數的宣告,例如int i = 0, a = 2, b = 3
。這些變數僅在迴圈範圍內有效。在迴圈執行期間隱藏在具有相同名稱的迴圈之前定義的變數。condition
:此語句在每個迴圈體執行之前進行評估,如果計算結果為false
則中止迴圈。iteration execution
:這個語句在迴圈體之後執行,在下一個條件評估之前,除非for
迴圈在體內被中止 (通過break
,goto
,return
或丟擲異常)。你可以在iteration execution
部分輸入多個語句,例如a++, b+=10, c=b+a
。
一個 for
迴圈的粗略等價,重寫為 while
迴圈是:
/*initialization*/
while (/*condition*/)
{
// body of the loop; using 'continue' will skip to increment part below
/*iteration execution*/
}
使用 for
迴圈的最常見情況是執行特定次數的語句。例如,請考慮以下事項:
for(int i = 0; i < 10; i++) {
std::cout << i << std::endl;
}
有效迴圈還包括:
for(int a = 0, b = 10, c = 20; (a+b+c < 100); c--, b++, a+=c) {
std::cout << a << " " << b << " " << c << std::endl;
}
在迴圈之前隱藏宣告變數的示例是:
int i = 99; //i = 99
for(int i = 0; i < 10; i++) { //we declare a new variable i
//some operations, the value of i ranges from 0 to 9 during loop execution
}
//after the loop is executed, we can access i with value of 99
但是如果你想使用已經宣告的變數而不是隱藏它,那麼省略宣告部分:
int i = 99; //i = 99
for(i = 0; i < 10; i++) { //we are using already declared variable i
//some operations, the value of i ranges from 0 to 9 during loop execution
}
//after the loop is executed, we can access i with value of 10
筆記:
- 初始化和增量語句可以執行與條件語句無關的操作,或者根本不執行任何操作 - 如果你希望這樣做。但出於可讀性原因,最佳做法是僅執行與迴圈直接相關的操作。
- 初始化語句中宣告的變數僅在
for
迴圈的範圍內可見,並在迴圈終止時釋放。 - 不要忘記在
initialization statement
中宣告的變數可以在迴圈期間修改,以及在condition
中檢查的變數。
從 0 到 10 計數的迴圈示例:
for (int counter = 0; counter <= 10; ++counter)
{
std::cout << counter << '\n';
}
// counter is not accessible here (had value 11 at the end)
程式碼片段的說明:
int counter = 0
將變數counter
初始化為 0.(此變數只能在for
迴圈內使用。)counter <= 10
是一個布林條件,檢查counter
是否小於或等於 10.如果是true
,則迴圈執行。如果是false
,則迴圈結束。++counter
是一個遞增操作,它在下一個條件檢查之前將counter
的值增加 1。
通過將所有語句留空,可以建立無限迴圈:
// infinite loop
for (;;)
std::cout << "Never ending!\n";
與上述相當的 while
迴圈是:
// infinite loop
while (true)
std::cout << "Never ending!\n";
但是,仍然可以通過使用語句 break
,goto
或 return
或通過丟擲異常來保留無限迴圈。
在不使用 <algorithm>
標頭的情況下迭代來自 STL 集合(例如,vector
)的所有元素的下一個常見示例是:
std::vector<std::string> names = {"Albert Einstein", "Stephen Hawking", "Michael Ellis"};
for(std::vector<std::string>::iterator it = names.begin(); it != names.end(); ++it) {
std::cout << *it << std::endl;
}