2016-01-30 4 views
1

Как создать прототип функции, который позволил бы одной функции одновременно находить и возвращать как самые низкие, так и самые высокие значения в массиве? Спасибо.Как вернуть два значения из функции?

+1

Верните структуру из двух чисел или std :: pair. –

+0

Может использовать массив (например, передать массив в функцию или определить глобально). – roottraveller

+0

Возможный дубликат [возврат нескольких значений из функции] (http://stackoverflow.com/questions/3829167/returning-multiple-values-from-a-function) – roottraveller

ответ

0

использование stl pair data type для возврата два значения или пользователь определить struct data type для возврата большего значения от функции.

Или вы можете вернуть массив из функции для нескольких значений.

Существует так много способов.

1
typedef struct { 
    int a, b; 
} tuple; 

tuple example() { 
    tuple ret = {1, 2}; 
    return ret; 
} 
+0

Большое спасибо. Не думал о структурах вообще. –

+0

Это решение C, но оно заново изобретает колесо, когда контейнеры-утилиты C++ могут выполнять одно и то же задание без явного определения собственных пользовательских типов. – ShadowRanger

0

Есть три возможных сценариев ..

Метод 1 использует глобальный массив.

Способ 2 использует указатель.

Способ 3 используется структура.

Вы не можете вернуть несколько значений из функции C++ с помощью переменных. Вы можете вернуть только структуру данных с несколькими значениями, такими как структура или массив.

13

std::pair обложки, возвращающие два значения, std::tuple обобщает на любое количество значений. И с std::tuple «s std::tie utility function, вызывающий абонент может получить результаты в отдельных переменных также избавляет от необходимости извлекать их один за другим, например:

std::tuple<int, int> returns_two() 
{ 
    return std::make_tuple(1, -1); 
} 

int main() { 
    int a, b; 

    std::tie(a, b) = returns_two(); 

    // a and b are now 1 and -1, no need to work with std::tuple accessors 
    std::cout << "A" << a << std::endl; 
} 

Конечно, в этом случае, вы на самом деле не вам нужно перевернуть свой собственный код, чтобы вернуть min и max ввода, потому что есть функция шаблона, которая уже делает это, std::minmax (для двух дискретных списков аргументов и инициализаторов) и std::minmax_element (для диапазонов, определенных итераторами) (которые оба возвращают std::pair и std::pair полностью совместим с std::tuple двух элементов).