Как функция может вернуть требуемые числа, используя ссылку? - PullRequest
0 голосов
/ 22 октября 2018

Я сделал функцию, которая необходима пользователю для ввода размера массива, значений массива, и он будет возвращать самое большое и наименьшее число в этом массиве.

Мой вопрос: как я могу вернуть эти два значения по ссылке?

Вот мой код:

void function()
{
    int i, n;
    int arr[10];

    cout << "Enter the size of array: ";
    cin >> n;
    cout << endl;

    for (i = 0; i < n; ++i)
    {
        cout << "Number " << i + 1 << " : ";
        cin >> arr[i];
    }

    for (i = 1; i < n; ++i)
    {
        if (arr[0] < arr[i])
            arr[0] = arr[i];
    }
    cout << "Biggest number is: " << arr[0];
    cout << endl;

    for (i = 1; i < n; ++i)
    {
        if (arr[0] > arr[i])
            arr[0] = arr[i];
    }
    cout << "Smallest number is: " << arr[0];
}

int main()
{
    function();
    return 0;
}

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

В C ++ более распространена работа с векторами, итераторами и алгоритмами.Простое решение вашей проблемы:

std::vector<int> a1{ {1, 2, 3} };
const auto result = std::minmax_element(a1.begin(), a1.end());
auto forwardIteratorToMinimum = result.first;
auto forwardIteratorToMaximum = result.second;
0 голосов
/ 22 октября 2018

Для возврата результатов по ссылке Вам необходимо

1) Изменить определение функции для возврата ссылок (амперсанд &)

От:

void function()
{
    // ...
}

Кому:

void function(int& min_value, int& max_value)
{
    // ...
}

2) Внутри функции Вы должны присвоить значения переменным, возвращаемым по ссылке (min_value и max_value)

3) При вызовефункции, переменные должны быть предоставлены, которые будут "содержать" результаты:

С:

function();

До:

int min_val;
int max_val;

function(min_val, max_val);
0 голосов
/ 22 октября 2018

Если вы хотите, чтобы ваша функция возвращала пару чисел, вы можете использовать std::pair для этой цели.

std::pair<int, int> findMaxAndMin(int* array, int arraySize) {
    int biggest = std::numeric_limits<int>::min();
    int smallest = std::numeric_limits<int>::max();
    for (int i = 0; i < arraySize; i++) {
        if (array[i] > biggest) {
            biggest = array[i];
        }
        if (array[i] < smallest) {
            smallest = array[i];
        }
    }
    return std::make_pair(biggest, smallest);
}

int main() {
    int testArray[10] = {10, 9, 8, 7, -69, 100, -200, 300, 1, 2};
    auto result = findMaxAndMin(testArray, 10);
    std::cout << "biggest: " << result.first
        << ", smallest: " << result.second << std::endl;
}

Однако этот пример подходит только для целей обучения, обычно мы не делаемиспользовать массивы в стиле C в коде C ++.Чтобы хранить массив целых чисел переменной длины, вы должны использовать std::vector<int>.Затем, чтобы найти максимальный или минимальный элемент в векторе, вы должны использовать std::max_element и std::min_element.Позже, если вы хотите вернуть что-то более сложное, чем просто пару из двух целых чисел, вы должны определить свой собственный struct или class и написать функцию / метод, возвращающий ваш пользовательский тип.

Также обратите вниманиечто вы должны отделить логику, ответственную за вычисления и логику, отвечающую за ввод / вывод пользователя.Я дал вам только функцию, отвечающую за вычисления, вы можете написать себе функцию, отвечающую за запрос пользователя о вводе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...