в условии гораздо труднее правильно
// ...
Объявление объекта в условии гораздо труднее правильно использовать: такое объявление должно хотя бы раз дать значение false, иначе выполнение цикла никогда не прекратится. Вот пример, хотя и несколько надуманный:
#include <iostream>
int main()
{
for ( int ix = 0;
bool done = ix == 10;
++ix )
cout << "ix: " << ix << endl;
}
Видимость всех объектов, определенных внутри круглых скобок инструкции for, ограничена телом цикла. Например, проверка iter после цикла вызовет ошибку компиляции[8]:
int main()
{
string word;
vector< string > text;
// ...
for ( 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 )
// ...
Упражнение 5.8
Допущены ли ошибки в нижеследующих циклах for? Если да, то какие?
(a)
for ( int *ptr = &ia, ix = 0;
ix < size && ptr != ia+size;
++ix, ++ptr )
// ...
(b)
for ( ; ; ) {
if ( some_condition )
break;
// ...
}
(c)
for ( int ix = 0; ix < sz; ++ix )
// ...
if ( ix != sz )
// ...
(d)
int ix;
for ( ix < sz; ++ix )
// ...
(e)
for ( int ix = 0; ix < sz; ++ix, ++ sz )
// ...
Упражнение 5.9
Представьте, что вам поручено придумать общий стиль использования цикла for в вашем проекте. Объясните и проиллюстрируйте примерами правила использования каждой из трех частей цикла.
Упражнение 5.10
Дано объявление функции:
bool is_equa1( const vector<int> &vl,
const vector<int> &v2 );
Напишите тело функции, определяющей равенство двух векторов. Для векторов разной длины сравнивайте только то количество элементов, которое соответствует меньшему из двух. Например, векторы (0,1,1,2) и (0,1,1,2,3,5,8) считаются равными. Длину векторов можно узнать с помощью функций v1.size() и v2.size().
Содержание Назад Вперед