Циклы for и for each

Операторы циклов позволяют выполнить одни и те же инструкции многократно. Предположим, нужно вывести все числа от 1 до 100 по одному на строке. Обычным способом пришлось бы писать 100 строк кода:

std::cout << 1 << std::endl;
std::cout << 2 << std::endl;
// ...
std::cout << 100 << std::endl;

С помощью циклов то же действие можно выполнить одной строкой кода:

for (int i = 1; i <= 100; ++i) std::cout << i << std::endl;

Цикл for

Цикл for используется для выполнения выражений определенное число раз. Цикл имеет следующий формат:

for (<Начальное значение>; <Условие>; <Приращение>) {
   <Инструкции>
}

Параметры имеют следующие значения:

  • <Начальное значение> — присваивает переменной-счетчику начальное значение;
  • <Условие> — содержит логическое выражение. Пока логическое выражение возвращает значение true, выполняются инструкции внутри цикла;
  • <Приращение> — задает изменение переменной-счетчика на каждой итерации.

Последовательность работы цикла for:

  • Переменной-счетчику присваивается начальное значение.
  • Проверяется условие, если оно истинно, выполняются инструкции внутри цикла, а в противном случае выполнение цикла завершается.
  • Переменная-счетчик изменяется на величину, указанную в <Приращение>.
  • Переход к п. 2.

Переменная-счетчик может быть объявлена как вне цикла for, так и в параметре <Начальное значение>. Если переменная объявлена в параметре, то она будет видна только внутри цикла. Кроме того, допускается объявить переменную вне цикла и сразу присвоить ей начальное значение. В этом случае параметр <Начальное значение> можно оставить пустым. Пример:

int i; // Объявление вне цикла
for (i = 1; i <= 20; ++i) {
   std::cout << i << std::endl;
}
// Переменная i видна вне цикла
std::cout << i << std::endl; // 21
// Объявление внутри цикла
for (int j = 1; j <= 20; ++j) {
   std::cout << j << std::endl;
}
// Переменная j НЕ видна вне цикла
int k = 1; // Инициализация вне цикла
for ( ; k <= 20; ++k) {
   std::cout << k << std::endl;
}

Цикл выполняется до тех пор, пока <Условие> не вернет false. Если это не произойдет, то цикл будет бесконечным. Логическое выражение, указанное в параметре <Условие>, вычисляется на каждой итерации. Поэтому, если внутри логического выражения производятся какие-либо вычисления и значение не изменяется внутри цикла, то вычисление следует вынести в параметр <Начальное значение>. В этом случае вычисление указывается после присваивания значения переменной-счетчику через запятую. Пример:

for (int i = 1, j = 10 + 30; i <= j; ++i) {
   std::cout << i << std::endl;
}

Выражение, указанное в параметре <Приращение>, может не только увеличивать значение переменной-счетчика, но и уменьшать его. Кроме того, значение может изменяться на любую величину. Пример:

// Выводим числа от 100 до 1
for (int i = 100; i > 0; --i) {
   std::cout << i << std::endl;
}
// Выводим четные числа от 1 до 100
for (int j = 2; j <= 100; j += 2) {
   std::cout << j << std::endl;
}

Если переменная-счетчик изменяется внутри цикла, то выражение в параметре <Приращение> можно вообще не указывать:

for (int i = 1; i <= 10; ) {
   std::cout << i << std::endl;
   ++i; // Приращение
}

Все параметры цикла for и инструкции внутри цикла являются необязательными. Хотя параметры можно не указывать, точки с запятой обязательно должны быть. Если все параметры не указаны, то цикл окажется бесконечным. Чтобы выйти из бесконечного цикла следует использовать оператор break. Пример:

int i = 1;         // <Начальное значение>
for ( ; ; ) {      // Бесконечный цикл
   if (i <= 10) {  // <Условие>
      std::cout << i << std::endl;
      ++i;         // <Приращение>
   }
   else {
      break;       // Выходим из цикла
   }
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов