Программирование >>  Инициализация объектов класса, структура 

1 ... 66 67 68 [ 69 ] 70 71 72 ... 395


Эти три шага представляют собой полную итерацию цикла for. Теперь шаги 2 и 3 будут повторяться до тех пор, пока условие не станет равным false, т.е. ix окажется равным или большим sz.

В инструкции-инициализации можно определить несколько объектов, однако все они

for ( int ival = 0, *pi = &ia, &ri = val; ival < size; ++iva1, ++pi, ++ri )

должны быть одного типа, так как инструкция объявления допускается только одна:

Объявление объекта в условии гораздо труднее правильно использовать: такое объявление должно хотя бы раз дать значение false, иначе выполнение цикла никогда

#include <iostream>

int main() {

for ( int ix = 0;

bool done = ix == 10; ++ix

cout << ix: << ix << endl;

не прекратится. Вот пример, хотя и несколько надуманный:

Видимость всех объектов, определенных внутри круглых скобок инструкции for, ограничена телом цикла. Например, проверка iter после цикла вызовет ошибку

int main()

string word; vector< string

> text;

vector< string >::iterator iter = text.begin(), iter end = text.end(

iter != text.end(); ++iter )

if ( *iter == word ) break;

...

ошибка: iter и iter end невидим! if ( iter != iter end )

компиляции8:

Примечание [O.A.2]: Нумера ция сносок сбита, как и вся остальная. Необходима проверка.

8 До принятия стандарта языка С++ видимость объектов, определенных внутри круглых скобок for, простиралась на весь блок или функцию, содержащую данную инструкцию. Например, употребление двух циклов for внутри одного блока



верно для стандарта С++

в пред1дущих версиях C++ - ошибка: ival определена дважды for (int ival = 0; ival < size; ++iva1 ) ... for (int ival = size-1; ival > 0; ival ) ...

в ранних версиях языка вызывало ошибку: ival определена дважды. В стандарте С++ данный текст синтаксически правилен, так как каждый экземпляр ival является локальным для своего блока.

... Упражнение 5.8

for ( int *ptr = &ia, ix = 0;

ix < size && ptr != ia+size; ++ix, ++ptr ) ...

Допущен! ли ошибки в нижеследующих циклах for? Если да, то какие? (b)

for ( ; ; ) {

if ( some condition )

break; ...



int ix;

for ( ix < sz; ++ix ) ...

for ( int ix = 0; ix < sz; ++ix, ++ sz ) ...

Упражнение 5.9

Представьте, что вам поручено придумать общий стиль использования цикла for в вашем проекте. Объясните и проиллюстрируйте примерами правила использования каждой из трех частей цикла.

Упражнение 5.10

bool is ea1( const vector<int> &vl,

Дано объявление функции:

const vector<int> &v2 );

Напишите тело функции, определяющей равенство двух векторов. Для векторов разной длины сравнивайте только то количество элементов, которое соответствует меньшему из двух. Например, векторы (0,1,1,2) и (0,1,1,2,3,5,8) считаются равными. Длину векторов можно узнать с помощью функций v1.size() и v2.size() .

5.6. Инструкция while

while ( условие )

Синтаксис инструкции while следующий:

инструкция

Пока значением условия является true, инструкция в1полняется в такой последовательности:

1. Вычислить условие.

2. В1полнить инструкцию, если условие истинно.

for ( int ix = 0; ix < sz; ++ix )

...

if ( ix != sz ) ...



1 ... 66 67 68 [ 69 ] 70 71 72 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика