循环内包含另一个循环称为嵌套循环。我们来看一个例子,
假设我们想遍历一周中的每一天,持续 3 周。
为了实现这一点,我们可以创建一个嵌套循环迭代三次(3 周)。在循环内部,我们可以创建另一个循环迭代 7 次(7 天)。例如,
示例:嵌套 for 循环
// C++ program to display 7 days of 3 weeks
#include <iostream>
using namespace std;
int main() {
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
cout << " Day:" << j << endl;
}
}
return 0;
}
输出
Week: 1 Day:1 Day:2 Day:3 ... .. ... Week: 2 Day:1 Day:2 Day:3 ... ... ..
我们可以使用 while 和 do...while 以类似的方式创建嵌套循环。
示例:显示模式
// C++ program to display a pattern
// with 5 rows and 3 columns
#include <iostream>
using namespace std;
int main() {
int rows = 5;
int columns = 3;
for (int i = 1; i <= rows; ++i) {
for (int j = 1; j <= columns; ++j) {
cout << "* ";
}
cout << endl;
}
return 0;
}
输出
* * * * * * * * * * * * * * *
在此程序中,外层循环从 i == 1
迭代到 i == rows
。
内层循环从 j == 1
迭代到 j == columns
。在内层循环中,我们打印字符 '*'
。
嵌套循环中的 break 和 continue
当我们在内层循环中使用 break 语句时,它会终止内层循环,但不会终止外层循环。例如,
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
// break during the 2nd week
if (i == 2) {
break;
}
cout << " Day:" << j << endl;
}
}
输出
Week: 1 Day:1 Day:2 ... .. ... Week: 2 Week: 3 Day:1 Day:2 ... .. ...
当 i 的值为 2
时,此程序不会运行内层循环,即它不会打印第二周的天数。打印周的外层循环不受影响。
同样,当我们在内层循环中使用 continue 语句时,它只会跳过内层循环的当前迭代。外层循环不受影响。例如,
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
// continue if the day is an odd number
if (j%2 != 0) {
continue;
}
cout << " Day:" << j << endl;
}
}
输出
Week: 1 Day:2 Day:4 Day:6 Week: 2 Day:2 Day:4 Day:6 Week: 3 Day:2 Day:4 Day:6
此程序仅打印偶数天。
每当 days_in_week 为奇数时,continue
语句就会跳过内层循环的该次迭代。