Renvoyer plusieurs valeurs à partir de la fonction en C++
-
Utilisez
struct
pour renvoyer plusieurs valeurs d’une fonction en C++ -
Utilisez
std::pair
pour renvoyer plusieurs valeurs d’une fonction en C++ - Utiliser un tableau pour renvoyer plusieurs valeurs à partir d’une fonction en C++
Cet article montre plusieurs méthodes sur la façon de renvoyer plusieurs valeurs à partir d’une fonction en C++.
Utilisez struct
pour renvoyer plusieurs valeurs d’une fonction en C++
Les variables struct
personnalisées peuvent être utilisées pour renvoyer plusieurs valeurs à partir de fonctions. À savoir, nous démontrons un exemple qui implémente une structure membre à deux données pour renvoyer une paire int
à partir de la fonction qui recherche le maximum/minimum dans le vector
d’entiers. Notez que l’on peut définir n’importe quel type de struct
pour répondre à leurs besoins et étendre le nombre de membres de données. Dans ce cas, nous déclarons la variable locale struct
dans la portée de la fonction findMaxMin
et la renvoyons par valeur à la routine main
. La variable struct
peut également être initialisée dans la fonction main
et passée au findMaxMin
par référence pour y stocker les valeurs de résultat.
#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;
}
Production:
Maximum element is 20, Minimum - 1
Utilisez std::pair
pour renvoyer plusieurs valeurs d’une fonction en C++
std::pair
est fourni avec la bibliothèque standard C++, et il peut stocker deux objets hétérogènes comme une paire. Ainsi, nous pouvons réimplémenter l’exemple précédent sans définir notre struct
personnalisé car le std::pair
a déjà une fonctionnalité intégrée étendue. Un inconvénient est qu’il ne peut renvoyer que deux valeurs si nous n’y stockons pas d’autres structures multi-éléments. Notez que nous avons échangé les algorithmes de recherche max
/min
avec des algorithmes STL - std::max_element
et std::min_element
respectivement.
#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;
}
Production:
Maximum element is 20, Minimum - 1
Utiliser un tableau pour renvoyer plusieurs valeurs à partir d’une fonction en C++
Alternativement, nous pouvons déclarer un tableau de style C pour stocker et renvoyer plusieurs valeurs de la fonction. Cette méthode fournit une interface plus simple pour travailler avec un plus grand nombre de valeurs. Il est plus efficace de déclarer un tableau dans la fonction appelante et de transmettre son adresse à l’appelé. De cette façon, même des tableaux énormes peuvent être passés en utilisant un seul pointeur sans aucune surcharge croissante.
#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;
}
Production:
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