Comment retourner un tableau à partir d'une fonction en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la manipulation des pointeurs pour retourner un tableau de type C à partir de la fonction en C++
  2. Utiliser le conteneur vector pour retourner le tableau à partir de la fonction en C++
Comment retourner un tableau à partir d'une fonction en C++

Cet article présente la façon de retourner un tableau à partir de la fonction en C++.

Utiliser la manipulation des pointeurs pour retourner un tableau de type C à partir de la fonction en C++

En C/C++, lorsque la notation array[] est passée en paramètre de fonction, ce n’est qu’un pointeur vers le premier élément du tableau remis. Par conséquent, le prototype de fonction que nous devons construire est celui qui retourne le pointeur au type stocké dans le tableau ; dans notre cas, il s’agit de int. Une fois la fonction retournée, nous pouvons accéder à ses éléments avec une notation de tableau [] ou en déréférençant le pointeur lui-même (peut-être faire un peu d’arithmétique de pointeur comme avant ceci).

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

Production:

array = [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, ]

Notez que la fonction MultiplyArrayByTwo peut être implémentée en tant que void et nous pouvons accéder aux éléments modifiés de la variable c_array puisqu’ils pointent vers la même adresse, comme le montre l’exemple suivant:

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

Utiliser le conteneur vector pour retourner le tableau à partir de la fonction en C++

Dans cette version, nous stockons notre tableau dans un conteneur vector, qui peut mettre à l’échelle ses éléments de manière dynamique, il n’est donc pas nécessaire de passer le paramètre size.

Notez que nous retournons un objet différent de la fonction, donc nous ne pouvons pas utiliser cpp_array pour y accéder. Nous devons créer une nouvelle variable et lui attribuer la valeur de retour de la fonction. Ensuite, nous pouvons itérer à travers elle et produire le résultat.

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

Article connexe - C++ Function

Article connexe - C++ Array