Mehrere Werte aus einer Funktion in C++ zurückgeben
-
Verwenden von
struct
zur Rückgabe mehrerer Werte aus einer Funktion in C++ -
Verwenden von
std::pair
zur Rückgabe mehrerer Werte aus einer Funktion in C++ - Verwenden Sie Array, um mehrere Werte von einer Funktion in C++ zurückzugeben
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
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