С++ для начинающих


         

в условии гораздо труднее правильно


        // ...

Объявление объекта в условии гораздо труднее правильно использовать: такое объявление должно хотя бы раз дать значение 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().


Содержание  Назад  Вперед