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


         

Инструкция if - часть 5


Вот окончательная версия функции min() и программа main(), проверяющая ее работу:

#include <iostream>

#include <vector>

int min( const vector< int > &ivec, int &occurs )

{

    int minVal = ivec[ 0 ];

    occurs = 1;

    int size = ivec.size();

    for ( int ix = 1; ix < size; ++ix )

    {

        if ( minVal == ivec[ ix ] )

            ++occurs;

        else

        if ( minVal > ivec[ ix ] ){

            minVal = ivec[ ix ];

            occurs = 1;

        }

    }

    return minVal;

}

int main()

{

    int ia[] = { 9,1,7,1,4,8,1,3,7,2,6,1,5,1 };

    vector<int> ivec( ia, ia+14 );

    int occurs = 0;

    int minVal = min( ivec, occurs );

    cout << "Минимальное значение: " << minVal

         << " встречается: " << occurs << " раз.\n";

    return 0;

}

Результат работы программы:

Минимальное значение: 1 встречается: 5 раз.

В некоторых случаях вместо инструкции if-else можно использовать более краткое и выразительное условное выражение. Например, следующую реализацию функции min():

template <class valueType>

inline const valueType&

min( valueType &vall, valueType &va12 )

{

    if ( vall < va12 )

        return vall;

    return va12;

}

можно переписать так:

template <class valueType>

inline const valueType&

min( valueType &vall, valueType &va12 )

{

    return ( vall < va12 ) ?    vall : va12;

}

Длинные цепочки инструкций if-else, подобные приведенной ниже, трудны для восприятия и, таким образом, являются потенциальным источником ошибок.

if ( ch == 'a' ||

     ch == 'A' )

        ++aCnt;

else

if ( ch == 'e' ||

     ch == 'E' )

        ++eCnt;

else

if ( ch == 'i' ||

     ch == 'I' )

        ++iCnt;

else

if ( ch == 'o' ||

     ch == '0' )

        ++oCnt;

else

if ( ch == 'u' ||

     ch == 'U' )

        ++uCnt;

В качестве альтернативы таким цепочкам С++ предоставляет инструкцию switch. Это тема следующего раздела.

Упражнение 5.3

Исправьте ошибки в примерах:

(a) if ( ivall != iva12 )

        ivall = iva12

    else  

        ivall = iva12 = 0;

(b) if ( ivat < minval )       

        minvat = ival;

        occurs = 1;

(c) if ( int ival = get_value())

        cout << "ival = "

             << ival << endl;

    if ( ! ival )

        cout << "ival = 0\n";

(d) if ( ival = 0 )

        ival = get_value();

(e) if ( iva1 == 0 )

    else ival = 0;

Упражнение 5.4

Преобразуйте тип параметра occurs функции min(), сделав его не ссылкой, а простым объектом. Запустите программу. Как изменилось ее поведение?




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