Язык программирования C++. Вводный курс


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


if ( minVal <= ivec[ i ] ) {

    if ( minVal == ivec[ i ] )

        ++occurs;

    else {

        minVal    = ivec[ i ];

        occurs    = 1;

    }

}

Одним из способов разрешения данной проблемы является заключение внутреннего if в фигурные скобки:

if ( minVal <= ivec[ i ] ) {

    if ( minVal == ivec[ i ] )

        ++occurs;

}

else {

    minVal = ivec[ i ];

    occurs = 1;

}

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

Вот первый вариант функции min(). Второй аргумент функции будет возвращать количество вхождений минимального значения в вектор. Для перебора элементов массива используется цикл for. Но мы допустили ошибку в логике программы. Сможете ли вы заметить ее?

#include <vector>

 

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

{

    int minVal = 0;

    occurs = 0;

 

    int size = ivec.size();

 

    for ( int ix = 0; ix < size; ++ix ) {

        if ( minVal == ivec[ ix ] )

            ++occurs;

        else

        if ( minVal > ivec[ ix ] ) {

            minVal = ivec[ ix ];

            occurs = 1;

        }

    }

    return minVal;

}

Обычно функция возвращает только одно значение. Однако согласно нашей спецификации в точке вызова должно быть известно не только само минимальное значение, но и количество его вхождений в вектор. Для возврата второго значения мы использовали параметр типа

ссылка. (Параметры-ссылки рассматриваются в разделе 7.3.) Любое присваивание значения ссылке occurs

изменяет значение переменной, на которую она ссылается:

int main()

{

    int occur_cnt = 0;

    vector< int > ivec;

 

    // occur_cnt получает значение occurs

    // из функции min()

    int minval = min( ivec, occur_cnt );

 

    // ...

}

Альтернативой использованию параметра-ссылки является применение объекта класса pair, представленного в разделе 3.14. Функция min() могла бы возвращать два значения в одной паре:




Начало  Назад  Вперед



Книжный магазин