Como devolver uma array a partir de uma função em C++
- Use a Manipulação de Ponteiros para retornar uma array no estilo C a partir da função em C++
-
Utilizar o
vector
Container para retornar o Array da Função em C++
Este artigo apresentará como devolver um array da função em C++.
Use a Manipulação de Ponteiros para retornar uma array no estilo C a partir da função em C++
Em C/C++, quando a notação array[]
é passada como um parâmetro de função, é apenas um ponteiro para o primeiro elemento da array entregue. Portanto, o protótipo de função que precisamos construir é aquele que retorna o ponteiro ao tipo armazenado no array; em nosso caso, é int
. Uma vez que a função retorna, podemos acessar seus elementos com uma notação de array []
ou desreferenciando o próprio ponteiro (talvez fazer alguma aritmética de ponteiro como antes disso).
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int *MultiplyArrayByTwo(int arr[], int size) {
for (int i = 0; i < size; ++i) {
arr[i] *= 2;
}
return arr;
}
int main() {
constexpr int size = 10;
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *ptr = MultiplyArrayByTwo(c_array, size);
cout << "array = [ ";
for (int i = 0; i < size; ++i) {
cout << ptr[i] << ", ";
}
cout << "]" << endl;
return EXIT_SUCCESS;
}
Resultado:
array = [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, ]
Note que a função MultiplyArrayByTwo
poderia ser implementada como void
e poderíamos acessar elementos modificados a partir da variável c_array
uma vez que eles apontam para o mesmo endereço, como mostrado no exemplo a seguir:
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
void MultiplyArrayByTwo(int arr[], int size) {
for (int i = 0; i < size; ++i) {
arr[i] *= 2;
}
}
int main() {
constexpr int size = 10;
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
MultiplyArrayByTwo(c_array, size);
cout << "array = [ ";
for (int i = 0; i < size; ++i) {
cout << c_array[i] << ", ";
}
cout << "]" << endl;
return EXIT_SUCCESS;
}
Utilizar o vector
Container para retornar o Array da Função em C++
Nesta versão, armazenamos nossa array em um recipiente vector
, que pode escalar dinamicamente seus elementos, de modo que não há necessidade de passar o parâmetro size
.
Observe que retornamos um objeto diferente da função, portanto não podemos utilizar o cpp_array
para acessá-lo. Precisamos criar uma nova variável e atribuir a ela o valor de retorno da função. Então, podemos iterar através dela e emitir o resultado.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::vector;
vector<int> MultiplyArrayByTwo(const vector<int> *arr) {
vector<int> tmp{};
for (const auto &item : *arr) {
tmp.push_back(item * 2);
}
return tmp;
}
int main() {
vector<int> cpp_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto cpp_array_2x = MultiplyArrayByTwo(&cpp_array);
cout << "array = [ ";
for (int i : cpp_array_2x) {
cout << i << ", ";
}
cout << "]" << endl;
return EXIT_SUCCESS;
}
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 FacebookArtigo relacionado - C++ Function
- A diferença entre argumentos e parâmetros de função em C++
- As diferenças entre funções virtuais e virtuais puras em C++
- Funções inline em C++
- Sobrecarga de função em C++
- Sobrecarga de função VS Substituindo em C++
- Use a família de funções std::stod em C++