Devolver varios valores de la función en C++

Jinku Hu 12 octubre 2023
  1. Utilice struct para devolver varios valores de una función en C++
  2. Utilice std::pair para devolver varios valores de una función en C++
  3. Usar un array para devolver múltiples valores de una función en C++
Devolver varios valores de la función en C++

Este artículo mostrará varios métodos sobre cómo devolver varios valores de una función en C++.

Utilice struct para devolver varios valores de una función en C++

Las variables de struct definidas a medida se pueden utilizar para devolver múltiples valores de funciones. Es decir, demostramos un ejemplo que implementa una estructura de miembros de dos datos para devolver un par int de la función que busca el máximo / mínimo en el vector de enteros. Tenga en cuenta que se puede definir cualquier tipo de struct para adaptarse a sus necesidades y ampliar el recuento de miembros de datos. En este caso, declaramos la variable local struct en el alcance de la función findMaxMin y la devolvemos por valor a la rutina main. La variable struct también se puede inicializar en la función main y pasar a findMaxMin por referencia para almacenar allí los valores de resultado.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::pair;
using std::string;
using std::vector;

struct IntPair {
  int first, second;
} typedef IntPair;

IntPair findMaxMin(vector<int> &arr) {
  IntPair ret;
  int max = arr[0];
  int min = arr[0];

  for (const auto &item : arr) {
    if (item > max) max = item;
    if (item < min) min = item;
  }

  ret.first = max;
  ret.second = min;
  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

  auto ret = findMaxMin(array);
  cout << "Maximum element is " << ret.first << ", Minimum - " << ret.second
       << endl;

  return EXIT_SUCCESS;
}

Producción :

Maximum element is 20, Minimum - 1

Utilice std::pair para devolver varios valores de una función en C++

std::pair es la biblioteca estándar de C++ y puede almacenar dos objetos heterogéneos como un par. Por lo tanto, podemos volver a implementar el ejemplo anterior sin definir nuestra struct personalizada ya que el std::pair ya tiene una amplia funcionalidad incorporada. Una desventaja es que solo puede devolver dos valores si no almacenamos otras estructuras de varios elementos en ellos. Tenga en cuenta que intercambiamos los algoritmos de búsqueda max/min por los de STL: std::max_element y std::min_element respectivamente.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::pair;
using std::string;
using std::vector;

std::pair<int, int> findMaxMin2(vector<int> &arr) {
  std::pair<int, int> ret;

  auto max = std::max_element(arr.begin(), arr.end());
  auto min = std::min_element(arr.begin(), arr.end());

  ret.first = arr.at(std::distance(arr.begin(), max));
  ret.second = arr.at(std::distance(arr.begin(), min));
  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

  auto ret = findMaxMin2(array);
  cout << "Maximum element is " << ret.first << ", Minimum - " << ret.second
       << endl;

  return EXIT_SUCCESS;
}

Producción :

Maximum element is 20, Minimum - 1

Usar un array para devolver múltiples valores de una función en C++

Alternativamente, podemos declarar un array de estilo C para almacenar y devolver múltiples valores de la función. Este método proporciona una interfaz más sencilla para trabajar con una mayor cantidad de valores. Es más eficiente declarar un array en la función de llamada y pasar su dirección al destinatario. De esta forma, se pueden pasar incluso matrices enormes con un solo puntero sin que aumente la sobrecarga.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::pair;
using std::string;
using std::vector;

int *findMaxMin2(vector<int> &arr, int ret[]) {
  auto max = std::max_element(arr.begin(), arr.end());
  auto min = std::min_element(arr.begin(), arr.end());

  ret[0] = arr.at(std::distance(arr.begin(), max));
  ret[1] = arr.at(std::distance(arr.begin(), min));

  return ret;
}

int main() {
  vector<int> array = {1,  2,  3,  4,  5,  6,  7,  8,  9,  10,
                       11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
  int ret_array[2];

  auto ret = findMaxMin2(array, ret_array);
  cout << "Maximum element is " << ret[0] << ", Minimum - " << ret[1] << endl;

  return EXIT_SUCCESS;
}

Producción :

Maximum element is 20, Minimum - 1
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Function