Renvoyer plusieurs valeurs à partir de la fonction en C++

Jinku Hu 12 octobre 2023
  1. Utilisez struct pour renvoyer plusieurs valeurs d’une fonction en C++
  2. Utilisez std::pair pour renvoyer plusieurs valeurs d’une fonction en C++
  3. Utiliser un tableau pour renvoyer plusieurs valeurs à partir d’une fonction en C++
Renvoyer plusieurs valeurs à partir de la 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
Auteur: 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

Article connexe - C++ Function