循环用于重复执行某些逻辑。
最常见的两种类型是 while loop(while 循环,不定次数循环)和 for loop(for 循环,确定次数,也就是计数循环)。
还有一种 for each 循环,会在后面的概念中介绍。
for loop 由一个头部和一个代码块组成,代码块里装着用花括号括起来的循环体。
头部由 3 个用分号 ; 分隔的部分组成:初始化语句、条件和另一个表达式。
这几部分都可以为空。
for (init-statement; condition; expression) {
some_statement;
}
while loop 只要条件检查为 true,就会一直执行它的循环体。
下面的代码片段展示了如何把 for 循环改写成 while 循环。
init-statement;
while(condition) {
some_statement;
expression;
}
使用循环时,经常需要给计数器变量加 1 或减 1。
这种操作太常见了,所以有了专门的运算符:++ 和 --。
它们有前缀和后缀两种形式。 前缀形式会在语句使用该变量之前改变它,后缀形式则在之后改变。 大多数时候你可能想用前缀形式。
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
初始化部分通常用来设置一个计数器变量,条件部分检查循环应该继续还是停止,后置部分通常在每次重复结束时让计数器自增。
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
这个循环会把从 1 到 9 的数字相加(包括 9)。
在循环体内,你可以用 break 关键字彻底停止循环的执行:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
与之相对,continue 关键字只停止当前这一次迭代的执行,然后继续下一次迭代:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (n%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
注意:把
break和continue的使用降到最少,或者完全避免使用,通常会让循环的逻辑更容易理解。