循环进阶
上一篇文章循环初步 (opens new window),我们讲解了for
、while
循环,break
,continue
关键词的基本用法。下面我们来看循环的一些高级用法。
本文包含以下关键内容:
- 逆序for循环:介绍了如何使用逆序for循环从静态数组的末尾开始遍历到开始。
- 逗号表达式:解释了逗号表达式的工作原理,以及如何用它来执行多个操作并获取最后一个操作的结果。
- 双向for循环:展示了如何使用双向for循环同时从数组的两端开始向中间遍历,并在适当时机打印数组元素。
- 花括号的省略:讨论了在特定条件下,for循环中的花括号和语句可以如何被省略,以及省略的后果。
# 逆序for循环:反向遍历静态数组
逆序for循环同样适用于静态数组。我们可以声明一个静态数组,并使用逆序for循环来从数组的末尾开始遍历。
示例
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5}; // 静态数组
int n = 5;
for (int i = n - 1; i >= 0; --i) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
在这个例子中,我们首先定义了一个静态数组arr,并计算了它的元素个数。然后,我们使用逆序for循环从数组的最后一个元素开始向前打印每个元素。
# 逗号表达式:执行多个操作
逗号表达式由一系列用逗号分隔的表达式组成。从左到右依次计算每个表达式,最后一个表达式的结果是整个逗号表达式的结果。
示例
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 2, c;
// 使用逗号表达式同时更新a和b的值
c = (a++, ++b, a + b); // 首先执行a++,然后执行++b,最后计算a + b
cout << "a: " << a << ", b: " << b << ", c: " << c << endl; // 输出a: 2, b: 3, c: 5
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
在这个例子中,我们有三个整数变量a、b和c。我们使用逗号表达式来执行一系列操作:首先,a的值增加1(a++),然后b的值增加1(++b),最后计算a和b的新值之和(a + b),并将结果赋值给c。逗号表达式的结果是最后一个操作的结果,所以c的值是2 + 3,即5。
# 双向for循环:同时从两端开始遍历
双向for循环是一种特殊的循环,它同时从数组的开始和结束向中间遍历。这种循环在需要同时处理数组两端元素时非常有用。
示例
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5}; // 静态数组
int n = 5;
// 同时从数组的开始和结束向中间遍历
for (int i = 0, j = n - 1; i < j; i++, j--) {
cout << "arr[" << i << "]: " << arr[i] << ", arr[" << j << "]: " << arr[j] << endl;
}
cout << "Loop ended." << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在这个例子中,我们定义了一个静态数组arr,然后使用双向for循环同时从数组的开始(i)和结束(j)向中间遍历。在每次迭代中,我们打印出i和j指向的数组元素,直到i和j相遇或者交错。
# 省略
- 当花括号内只有一条语句时,可以省略花括号。
#include <bits/stdc++.h>
using namespace std;
int main(void) {
int i;
for (i = 1; i <= 10; i++)
cout << "hi1" << endl;
cout << "hi2" << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
答案是10次hi1
,一次hi2
。
2. 省略for循环中的语句
for循环的圆括号中有三条语句,都是可以省略的。
比如可以省略起始条件:
int i = 1;
for (; i <= 10; i++) cout << "hi1" << endl;
1
2
2
如果三个条件全省略 for(;;)
等价于 while(true)
,就是一个死循环。
上次更新: 2024/03/17, 23:38:58