"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора


1.4.7 Оператор while

Рассмотрим копирование строки, когда заданы указатель p на ее
первый символ и указатель q на целевую строку. По соглашению строка
оканчивается символом с целым значением 0.

while (p != 0) {
*q = *p; // скопировать символ
q = q+1;
p = p+1;
}
*q = 0; // завершающий символ 0 скопирован не был

Следующее после while условие должно быть заключено в круглые
скобки. Условие вычисляется, и если его значение не ноль,
выполняется непосредственно следующий за ним оператор. Это
повторяется до тех пор, пока вычисление условия не даст ноль.
Этот пример слишком пространен. Можно использовать операцию ++
для непосредственного указания увеличения, и проверка упростится:

while (*p) *q++ = *p++;
*q = 0;

где конструкция *p++ означает: "взять символ, на который указывает
p, затем увеличить p."
Пример можно еще упростить, так как указатель p разыменовывается
дважды за каждый цикл. Копирование символа можно делать тогда же,
когда производится проверка условия:

while (*q++ = *p++) ;

Здесь берется символ, на который указывает p, p увеличивается, этот
символ копируется туда, куда указывает q, и q увеличивается. Если
символ ненулевой, цикл повторяется. Поскольку вся работа
выполняется в условии, не требуется ниодного оператора. Чтобы
указать на это, используется пустой оператор. C++ (как и C)
одновременно любят и ненавидят за возможность такого чрезвычайно
краткого ориентированного на выразительность программирования*.

1.4.8 Оператор for

Рассмотрим копирование десяти элементов одного вектора в другой:

for (int i=0; i<10; i++) q[i]=p[i];

Это эквивалентно

int i = 0;
while (i<10) {