Restituisce più valori dalla funzione in C++
-
Usa
struct
per restituire più valori da una funzione in C++ -
Usa
std::pair
per restituire più valori da una funzione in C++ - Usa Array per restituire più valori da una funzione in C++
Questo articolo illustrerà più metodi su come restituire più valori da una funzione in C++.
Usa struct
per restituire più valori da una funzione in C++
Le variabili struct
definite dall’utente possono essere utilizzate per restituire più valori dalle funzioni. Vale a dire, dimostriamo un esempio che implementa una struttura di membri a due dati per restituire una coppia int
dalla funzione che cerca il massimo/minimo nel vettore
degli interi. Si noti che è possibile definire qualsiasi tipo di struct
per soddisfare le proprie esigenze ed espandere il conteggio dei membri dei dati. In questo caso, dichiariamo la variabile struct
locale nell’ambito della funzione findMaxMin
e la restituiamo per valore alla routine main
. La variabile struct
può anche essere inizializzata nella funzione main
e passata a findMaxMin
per riferimento per memorizzare lì i valori dei risultati.
#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;
}
Produzione:
Maximum element is 20, Minimum - 1
Usa std::pair
per restituire più valori da una funzione in C++
std::pair
è fornita dalla libreria standard C++ e può memorizzare due oggetti eterogenei come una coppia. Quindi, possiamo reimplementare l’esempio precedente senza definire la nostra struct
personalizzata poiché std::pair
ha già funzionalità estese incorporate. Uno svantaggio è che può restituire solo due valori se non memorizziamo alcune altre strutture multielemento in essi. Nota che, abbiamo scambiato gli algoritmi di ricerca max
/min
con quelli STL - rispettivamente std::max_element
e 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;
}
Produzione:
Maximum element is 20, Minimum - 1
Usa Array per restituire più valori da una funzione in C++
In alternativa, possiamo dichiarare un array in stile C per memorizzare e restituire più valori dalla funzione. Questo metodo fornisce un’interfaccia più semplice per lavorare con una quantità maggiore di valori. È più efficiente dichiarare un array nella funzione caller e passare il suo indirizzo al chiamato. In questo modo, anche array di grandi dimensioni possono essere passati utilizzando un solo puntatore senza alcun sovraccarico crescente.
#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;
}
Produzione:
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