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

Jinku Hu 12 octobre 2023
  1. Utilisez la notation vector<T> func() pour retourner un vecteur à partir d’une fonction
  2. Utilisez la notation vector<T> &func() pour retourner un vecteur à partir d’une fonction
Comment retourner un vecteur à partir d'une fonction en C++

Cet article présentera comment retourner un vecteur à partir d’une fonction efficacement en C++.

Utilisez la notation vector<T> func() pour retourner un vecteur à partir d’une fonction

Le retour par valeur est la méthode préférée si nous retournons une variable vector déclarée dans la fonction. L’efficacité de cette méthode provient de sa sémantique des mouvements. Cela signifie que le retour d’un vecteur ne copie pas l’objet, évitant ainsi de perdre de la vitesse/espace supplémentaire. Sous le capot, elle pointe le pointeur vers l’objet vector renvoyé, ce qui permet d’accélérer l’exécution du programme par rapport à la copie de la structure ou de la classe entière.

#include <iostream>
#include <iterator>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

vector<int> multiplyByFour(vector<int> &arr) {
  vector<int> mult;
  mult.reserve(arr.size());

  for (const auto &i : arr) {
    mult.push_back(i * 4);
  }
  return mult;
}

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  vector<int> arrby4;

  arrby4 = multiplyByFour(arr);

  cout << "arr    - | ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;
  cout << "arrby4 - | ";
  copy(arrby4.begin(), arrby4.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

arr    - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
arrby4 - | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |

Utilisez la notation vector<T> &func() pour retourner un vecteur à partir d’une fonction

Cette méthode utilise la notation par référence, qui est la plus adaptée pour le retour des grandes structures et des classes. Notez que ne retournez pas la référence de la variable locale déclarée dans la fonction elle-même car elle conduit à une référence pendante. Dans l’exemple suivant, nous passons le vecteur arr par référence et le retournons également comme référence.

#include <iostream>
#include <iterator>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

vector<int> &multiplyByFive(vector<int> &arr) {
  for (auto &i : arr) {
    i *= 5;
  }
  return arr;
}

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  vector<int> arrby5;

  cout << "arr    - | ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;

  arrby5 = multiplyByFive(arr);

  cout << "arrby5 - | ";
  copy(arrby5.begin(), arrby5.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Production:

arr    - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
arrby5 - | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
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++ Vector