Читаем Освой самостоятельно С++ за 21 день. полностью

Синтаксис задания цикла for позволяет инициализировать несколько переменных- счетчиков, проверять сложные условия продолжения цикла или последовательно выполнять несколько операций над счетчиками цикла. Если присваиваются значения нескольким счетчикам или выполняется несколько операций, они записываются последовательно и разделяются запятыми. В листинге 7.10 инициализируются два счетчика, значения которых после каждой итерации увеличиваются на единицу.

Листинг 7.10. Использование нескольких счетчиков в цикле for

1: // Листинг 7.10.

2: // Использование нескольких счетчиков

3: // в цикле for

4:

5: #include

6:

7: int main

8: {

9:    for (int i=0, j=0; i<3; i++, j++)

10:   cout << "i: " << i << " j: " << j << endl;

11:   return 0;

12: }


Результат:

i: 0 j: 0

i: 1 j: 1

i: 2 j: 2


Анализ: В строке 9 переменные i и j инициализируются нулевыми значениями. Затем проверяется условие i<3 и, так как оно справедливо, выполняется первая итерация цикла. На каждой итерации осуществляется вывод значений счетчиков на экран. После этого выполняется третья часть конструкции for, в которой значения переменных-счетчиков увеличиваются на единицу. После выполнения строки 10 и изменения значений переменных условие проверяется снова. Если условие все еще справедливо, запускается следующая итерация цикла. Это происходит до тех пор, пока условие продолжения цикла не нарушится. В этом случае значения переменных не изменяются и управление передается следующему после цикла оператору.

Нулевые параметры цикла for

Любой параметр цикла for может быть опущен. Пропуск означает использование так называемого нулевого параметра. Нулевой параметр, как и любой другой, отделяется от остальных параметров цикла for символом точки с запятой (;). Если опустить первый и третий параметры цикла for, как показано в листинге 7.11, результат его применения будет аналогичен полученному при использовании оператора while.

Листинг 7.11. Нулевые параметры цикла for

1: // Листинг 7.11.

2: // Нулевые параметры цикла for

3:

4: #include

5:

6: int main

7: {

8:    int counter = 0;

9:

10:   for( ; counter < 5; )

11:   {

12:     counter++;

13:     cout << "Looping! ";

14:   }

15:

16:   cout << "\nCounter: " << counter << ".\n";

17:   return 0;

18: }


Результат:

Looping! Looping! Looping! Looping! Looping!

Counter: 5.


Анализ: Очевидно, что результат выполнения такого цикла в точности совпадает с результатом выполнения цикла while из листинга 7.8. В строке 8 присваивается значение переменной counter. Установки параметров цикла for, показанные в строке 10, содержат только проверку условия продолжения цикла. Операция над переменной цикла в конструкции for также опущена. Таким образом, этот цикл можно представить в виде


while (counter < 5).


Рассмотренный пример еще раз показывает, что возможности языка C++ позволяют решить одну и ту же задачу множеством способов. Листинг 7.11 приведен скорее для иллюстрации гибкости возможностей C++, поскольку ни один опытный программист не будет использовать цикл for подобным образом. Тем не менее можно опустить даже все три параметра цикла for, а для управления циклом использовать операторы break и continue. Пример использования конструкции for без параметров приведен в листинге 7.12.

Листинг 7.12. Использование оператора for без параметров

1: //Листинг 7.12.

2: // Использование оператора for без параметров

3:

4: #include

5:

6: int nain

7: {

8:    int counter=0; ,// установка начального значения счетчика

9:    int max;

10:   cout << " How many hellos?";

11:   cin >> max;

12:   for (;;) // задание бесконечного цикла

13:   {

14:     if (counter < max) // проверка значения

15:     {

16:       cout << "Hello!\n";

17:       counter++; // приращение значения счетчика

18:     }

19:     else

20:       break;

21:   }

22:   return 0;

23: }


Результат:

How many hellos?

Hello!

Hello!

Hello!


Анализ: В этом примере набор параметров оператора for максимально минимизирован. Опущены все три параметра — инициализация, условие и операция. Начальное значение счетчика присваивается в строке 8 еще до начала работы цикла. Условие продолжения цикла также проверяется в отдельной строке (строка 14), и, если оно истинно, выполняется операция тела цикла, после чего в строке 17 увеличивается значение счетчика. Если условие не выполняется, оператор break в строке 20 прерывает выполнение цикла.

Несмотря на то что рассмотренная программа выглядит достаточно нелепо, встречаются ситуации, когда конструкции for(;;) и while(true) оказываются просто необходимыми. Более полезный пример использования таких конструкций будет приведен далее в этой главе после рассмотрения оператора switch.

Использование пустых циклов for

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT