Devolver varios valores de la función en C++
-
Utilice
struct
para devolver varios valores de una función en C++ -
Utilice
std::pair
para devolver varios valores de una función en C++ - Usar un array para devolver múltiples valores de una 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
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