Chapter 10: Loops¶
在C++中,有三种循环结构,所有均用于多次执行特定的代码块。类似于条件if语句,如果在代码块中只有一条语句,可以省略花括号。
while循环¶
while循环仅在条件为真时执行代码块,并且只要条件为真则会继续循环。要记住,条件仅在每次迭代(循环)开始时检测。
int i = 0;
while (i < 10) {
cout << i++; // 0-9
}
Do-while循环¶
do-while循环的作用与while循环相同,所不同的是它在代码块结束时检测条件。所以相比于while循环,它总是至少执行一次代码块。注意,该循环以分号结束。
int j = 0;
do {
cout << j++; // 0-9
} while (j < 10);
for循环¶
for循环用于执行代码块指定的次数。它使用三个参数。第一个参数初始化计数器,并它总是在循环开始之前执行一次。计数器变量被限定在for循环的作用域内,并且在循环之后不可访问。第二个参数存储循环的条件,并在每次迭代之前检测。最后,第三个参数包含计数器的增量,并在每次循环结束时执行。
for (int k = 0; k < 10; ++k) {
cout << k; // 0-9
}
for循环有多种变化。例如,通过使用逗号操作符可以将第一个与第三个参数分为多个语句。
for (int k = 0, m = 0; k < 5; ++k, m--) {
cout << k+m; // "00000"
}
也可以忽略任意一个参数。如下面的示例所示:
for (;;) {
// infinite loop
}
for (int i=0; i<10; ) {
// increment i inside of loop
}
int counter = 0;
for (; counter<10; ++counter) {
// ...
}
// make counter usable outside of loop
C++11为数组与其它容器类型迭代引用于其于范围的循环语法。在每次迭代时,数组中的下一个元素被绑定到指定的变量,在此情况下是一个引用变量,并且循环继续,直到完成整个数组。
int a[3] = {1, 2, 3};
for (int &i : a) {
cout << i; // "123"
}
C++20通过允许其包含一个初始化器扩展了基于范围的循环。这对于迭代一个仅在循环中需要的昨时容器会非常有用。
for (int a[3] = {1, 2, 3}; int &i : a) {
cout << i; // "123"
}
中断与继续¶
有两种可用于循环中的跳转语句:break;与continue。break关键字结束循环结构,而continue略过当前迭代的其余部分并在下次迭代的开始处继续。
for (int i = 0; i < 10; i++)
{
if (i == 5) break; // end loop
if (i == 3) continue; // start next iteration
cout << i; // "0124"
}
goto语句¶
第三种需要知道的跳转语句是goto,执行无条件跳转到一个指定的标签处。该指令通常不会用到,因为它会使得程序流程难于跟踪。
goto myLabel; // jump to label
myLabel: // label declaration