Cómo devolver un array desde una función en C++

Jinku Hu 12 octubre 2023
  1. Usar la manipulación de punteros para devolver un array al estilo C desde la función en C++
  2. Usar el contenedor vector para devolver el array desde la función en C++
Cómo devolver un array desde una función en C++

Este artículo introducirá cómo devolver un array de la función en C++.

Usar la manipulación de punteros para devolver un array al estilo C desde la función en C++

En C/C++, cuando se pasa la notación array[] como parámetro de función, es sólo un puntero al primer elemento del array entregado. Por lo tanto, el prototipo de función que necesitamos construir es el que devuelve el puntero al tipo almacenado en el array; en nuestro caso es int. Una vez que la función regrese, podemos acceder a sus elementos con una notación de array [] o desreferenciando el puntero mismo (tal vez hacer algo de aritmética del puntero como antes de esto).

#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, ]

Observa que la función MultiplyArrayByTwo podría implementarse como void y podríamos acceder a los elementos modificados de la variable c_array ya que apuntan a la misma dirección, como se muestra en el siguiente ejemplo:

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

Usar el contenedor vector para devolver el array desde la función en C++

En esta versión, almacenamos nuestro array en un contenedor vector, que puede escalar dinámicamente sus elementos, así que no hay necesidad de pasar el parámetro size.

Fíjate que devolvemos un objeto diferente de la función, así que no podemos usar cpp_array para acceder a él. Necesitamos crear una nueva variable y asignarle el valor de retorno de la función. Entonces podemos iterar a través de ella y emitir el 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;
}
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

Artículo relacionado - C++ Function

Artículo relacionado - C++ Array