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

Lasha Khintibidze 30 enero 2023 10 octubre 2020
  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::cout; 
using std::cin;
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::cout;
using std::cin;
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::cout;
using std::cin;
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;
}

Artículo relacionado - C++ Function

Artículo relacionado - C++ Array