Вложенные циклы
Внутри цикла может быть другой цикл. Это называется вложенным циклом. На каждой итерации внешнего цикла внутренний цикл проходит целиком. Выпишем все обеды, которые предлагает столовая: каждое блюдо с каждым напитком.
std::vector<std::string> meals = {"пицца", "паста"};
std::vector<std::string> drinks = {"вода", "сок", "чай"};
for (std::string meal : meals) {
for (std::string drink : drinks) {
std::cout << meal << " " << drink << std::endl;
}
}Он выводит:
пицца вода
пицца сок
пицца чай
паста вода
паста сок
паста чайВнешний цикл берёт "пицца", а внутренний проходит по всем трём напиткам. Только после этого внешний цикл берёт "паста", и внутренний снова проходит по всем напиткам. Внутренний блок выполняется 2 × 3 = 6 раз. Давайте переменным двух циклов разные имена (здесь meal и drink), чтобы было понятно, какая из них какая.
Вложенные циклы удобны и для таблиц. Здесь оба цикла считают с индексом. Внутренний цикл выводит одну строку таблицы в одной строке, а std::endl после него заканчивает её:
for (int row = 1; row <= 3; row++) {
for (int column = 1; column <= 5; column++) {
std::cout << row * column << " ";
}
std::cout << std::endl;
}1 2 3 4 5
2 4 6 8 10
3 6 9 12 15 Посмотрите, где стоит std::cout << std::endl;: после закрывающей скобки внутреннего цикла, но всё ещё внутри внешнего. Он выполняется каждый раз, когда внутренний цикл вывел целую строку таблицы. Внутри внутреннего цикла он поставил бы каждое число в отдельную строку. После внешнего цикла он собрал бы все числа в одну длинную строку.
Задание
- 1
Турагентство предлагает поездку в каждый город из
citiesс каждым занятием изactivities. Напишите цикл поcitiesи вложенный в него цикл поactivities. Выведите каждую пару в отдельной строке: город, один пробел и занятие. В выводе 12 таких строк, и начинается он сМосква Теннис,Москва Шопинг,Москва Экскурсии,Казань Теннис… - 2
Под этим выведите таблицу умножения от 1 до 5: пять строк по пять чисел, разделённых пробелами. Первая строка —
1 2 3 4 5, вторая —2 4 6 8 10, последняя —5 10 15 20 25. Используйте два вложенных циклаforс индексом, а каждую строку заканчивайте с помощьюstd::endlво внешнем цикле.