Mehrere Werte aus einer Funktion in C++ zurückgeben

Jinku Hu 12 Oktober 2023
  1. Verwenden von struct zur Rückgabe mehrerer Werte aus einer Funktion in C++
  2. Verwenden von std::pair zur Rückgabe mehrerer Werte aus einer Funktion in C++
  3. Verwenden Sie Array, um mehrere Werte von einer Funktion in C++ zurückzugeben
Mehrere Werte aus einer Funktion in C++ zurückgeben

Dieser Artikel zeigt verschiedene Methoden zum Zurückgeben mehrerer Werte von einer Funktion in C++.

Verwenden von struct zur Rückgabe mehrerer Werte aus einer Funktion in C++

Benutzerdefinierte struct-Variablen können verwendet werden, um mehrere Werte von Funktionen zurückzugeben. Wir zeigen nämlich ein Beispiel, das eine Elementstruktur mit zwei Daten implementiert, um ein int-Paar von der Funktion zurückzugeben, die nach dem Maximum / Minimum im Vektor von Ganzzahlen sucht. Beachten Sie, dass Sie jede Art von Struktur definieren können, um ihren Anforderungen zu entsprechen, und die Anzahl der Datenelemente erweitern können. In diesem Fall deklarieren wir die lokale Variable struct im Funktionsumfang findMaxMin und geben sie als Wert an die Routine main zurück. Die Variable struct kann auch in der Funktion main initialisiert und als Referenz an das findMaxMin übergeben werden, um dort die Ergebniswerte zu speichern.

#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;
}

Ausgabe:

Maximum element is 20, Minimum - 1

Verwenden von std::pair zur Rückgabe mehrerer Werte aus einer Funktion in C++

std::pair wird als C++-Standardbibliothek bereitgestellt und kann zwei heterogene Objekte wie ein Paar speichern. Somit können wir das vorherige Beispiel erneut implementieren, ohne unsere eigenes struct zu definieren, da std::pair bereits eine umfangreiche Funktionen verfügt. Ein Nachteil ist, dass nur dann zwei Werte zurückgegeben werden können, wenn keine anderen Mehrelementstrukturen darin gespeichert sind. Beachten Sie, dass wir die max/min-Findungsalgorithmen mit STL-Algorithmen ausgetauscht haben - std::max_element bzw. std::min_element.

#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;
}

Ausgabe:

Maximum element is 20, Minimum - 1

Verwenden Sie Array, um mehrere Werte von einer Funktion in C++ zurückzugeben

Alternativ können wir ein Array im C-Stil deklarieren, um mehrere Werte von der Funktion zu speichern und zurückzugeben. Diese Methode bietet eine einfachere Schnittstelle für die Arbeit mit einer größeren Anzahl von Werten. Es ist effizienter, ein Array in der Aufruferfunktion zu deklarieren und seine Adresse an den Angerufenen zu übergeben. Auf diese Weise können sogar große Arrays mit nur einem Zeiger übergeben werden, ohne dass der Overhead zunimmt.

#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;
}

Ausgabe:

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

Verwandter Artikel - C++ Function