"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора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 разыменовывается дважды за каждый цикл. Копирование символа можно делать тогда же, когда производится проверка условия: 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) { |
|
|