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