Retornar vários valores da função em C++
-
Use
struct
para retornar vários valores de uma função em C++ -
Use
std::pair
para retornar vários valores de uma função em C++ - Use Array para retornar vários valores de uma função em C++
Este artigo demonstrará vários métodos sobre como retornar vários valores de uma função em C++.
Use struct
para retornar vários valores de uma função em C++
Variáveis struct
personalizadas podem ser usadas para retornar vários valores de funções. Nomeadamente, demonstramos um exemplo que implementa uma estrutura membro de dois dados para retornar um par int
da função que procura o máximo/mínimo no vector
de inteiros. Observe que é possível definir qualquer tipo de struct
para atender às suas necessidades e expandir a contagem de membros de dados. Nesse caso, declaramos a variável struct
local no escopo da função findMaxMin
e a retornamos por valor para a rotina main
. A variável struct
também pode ser inicializada na função main
e passada para findMaxMin
por referência para armazenar os valores de resultado lá.
#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;
}
Resultado:
Maximum element is 20, Minimum - 1
Use std::pair
para retornar vários valores de uma função em C++
std::pair
é fornecido com a biblioteca padrão C++, e pode armazenar dois objetos heterogêneos como um par. Assim, podemos reimplementar o exemplo anterior sem definir nosso struct
personalizado, pois o std::pair
já possui uma extensa funcionalidade embutida. Uma desvantagem é que ele só pode retornar dois valores se não armazenarmos algumas outras estruturas de vários elementos neles. Note que trocamos os algoritmos de busca max
/min
por STL - std::max_element
e std::min_element
respectivamente.
#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;
}
Resultado:
Maximum element is 20, Minimum - 1
Use Array para retornar vários valores de uma função em C++
Como alternativa, podemos declarar um array de estilo C para armazenar e retornar vários valores da função. Este método fornece uma interface mais direta para trabalhar com uma quantidade maior de valores. É mais eficiente declarar um array na função do chamador e passar seu endereço para o receptor. Dessa forma, até mesmo arrays enormes podem ser passados usando apenas um ponteiro sem qualquer sobrecarga 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;
}
Resultado:
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