```cpp
for (初始化; 判断条件; 更新) {
- 循环体;
+ 循环体;
}
```
```cpp
for (int i = 1; i <= n; ++i) {
- cin >> a[i];
+ cin >> a[i];
}
```
```cpp
while (判断条件) {
- 循环体;
+ 循环体;
}
```
```cpp
while (x > 1) {
- if (x % 2 == 1) {
- x = 3 * x + 1;
- } else {
- x = x / 2;
- }
+ if (x % 2 == 1) {
+ x = 3 * x + 1;
+ } else {
+ x = x / 2;
+ }
}
```
以下是 do...while 语句的结构:
```cpp
-do
-{
- 循环体;
+do {
+ 循环体;
} while (判断条件);
```
```cpp
do {
- // do someting...
+ // do someting...
} while (next_permutation(a + 1, a + n + 1));
```
// for 语句
for (statement1; statement2; statement3) {
- statement4;
+ statement4;
}
// while 语句
statement1;
while (statement2) {
- statement4;
- statement3;
+ statement4;
+ statement3;
}
```
statement1;
while (statement2) {
- statement1;
+ statement1;
}
// do...while 语句
do {
- statement1;
+ statement1;
} while (statement2);
```
```cpp
while (1) {
- // do something...
+ // do something...
}
for (;;) {
- // do something...
+ // do something...
}
```
可以看出,三种语句可以彼此代替,但一般来说,语句的选用遵守以下原则:
-1. 枚举一个变量时,使用 for 语句;
-2. “到何时为止”时,使用 while 语句;
-3. 使用 while 语句时,若要先执行循环体再进行判断,使用 do...while 语句。
+1. 枚举一个变量时,使用 for 语句;
+2. “到何时为止”时,使用 while 语句;
+3. 使用 while 语句时,若要先执行循环体再进行判断,使用 do...while 语句。
## break 与 continue 语句
```cpp
for (int i = 1; i <= 10; ++i) {
- std::cout << i << std::endl;
- if (i > 3) break;
- if (i > 2) continue;
- std::cout << i << std::endl;
+ std::cout << i << std::endl;
+ if (i > 3) break;
+ if (i > 2) continue;
+ std::cout << i << std::endl;
}
/*
// 逻辑较为不清晰,大括号层次复杂
for (int i = 1; i <= n; ++i) {
- if (i != x) {
- for (int j = 1; j <= n; ++j) {
- if (j != x) {
- // do something...
- }
- }
+ if (i != x) {
+ for (int j = 1; j <= n; ++j) {
+ if (j != x) {
+ // do something...
+ }
}
+ }
}
// 逻辑更加清晰,大括号层次简单明了
for (int i = 1; i <= n; ++i) {
- if (i == x) continue;
- for (int j = 1; j <= n; ++j) {
- if (j == x) continue;
- // do something...
- }
+ if (i == x) continue;
+ for (int j = 1; j <= n; ++j) {
+ if (j == x) continue;
+ // do something...
+ }
}
// for 语句判断条件复杂,没有体现“枚举”的本质
for (int i = l; i <= r && i % 10 != 0; ++i) {
- // do something...
+ // do something...
}
// for 语句用于枚举,break 用于“到何时为止”
for (int i = l; i <= r; ++i) {
- if (i % 10 == 0) break;
- // do something...
+ if (i % 10 == 0) break;
+ // do something...
}
// 语句重复,顺序不自然
statement1;
while (statement3) {
- statement2;
- statement1;
+ statement2;
+ statement1;
}
// 没有重复语句,顺序自然
while (1) {
- statement1;
- if (!statement3) break;
- statement2;
+ statement1;
+ if (!statement3) break;
+ statement2;
}
```
-