Passer le vecteur par référence en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la notation vector<T> &arr pour passer un vecteur par référence en C++
  2. Utilisez la notation const vector<T> &arr pour passer un vecteur par référence en C++
Passer le vecteur par référence en C++

Cet article présente plusieurs méthodes sur la façon de passer un vecteur par référence en C++.

Utilisez la notation vector<T> &arr pour passer un vecteur par référence en C++

std::vector est un moyen courant de stocker des tableaux en C++, car ils fournissent un objet dynamique avec plusieurs fonctions intégrées pour manipuler les éléments stockés. Notez que vector peut avoir une empreinte mémoire assez importante, il faut donc en tenir compte attentivement lors de leur transmission à des fonctions. Habituellement, il est recommandé de passer par référence et d’éviter toute copie de l’objet entier pour la portée de la fonction.

Dans l’exemple suivant, nous démontrons une fonction qui prend un seul vecteur de int par référence et modifie ses éléments. Les éléments vector sont imprimés avant et après l’appel multiplyByTwo dans la fonction principale. Notez que, même si nous stockons la valeur de retour dans une nouvelle variable arr_mult_by2, nous avons pu y accéder avec le nom d’origine arr puisque les éléments ont été modifiés dans le même objet et aucune nouvelle copie n’a été retournée.

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

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

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

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

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

  auto arr_mult_by2 = multiplyByTwo(arr);

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

  return EXIT_SUCCESS;
}

Production:

arr          - 1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
arr_mult_by2 - 2; 4; 6; 8; 10; 12; 14; 16; 18; 20;

Utilisez la notation const vector<T> &arr pour passer un vecteur par référence en C++

D’autre part, on peut garantir que la référence passée sera accessible pour modification dans la définition de la fonction. Cette fonctionnalité est fournie avec le mot-clé qualificatif const qui indique au compilateur d’interdire toute modification de l’objet donné dans la portée de la fonction courante. Notez que cela peut sembler un détail facultatif qui n’a pas besoin d’être souligné sur un développeur, mais parfois ces mots-clés peuvent aider le compilateur à optimiser le code machine pour de meilleures performances.

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

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

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

void findInteger(const vector<int> &arr) {
  int integer = 10;
  for (auto &i : arr) {
    if (i == integer) {
      cout << "found - " << integer << " in the array" << endl;
      return;
    }
  }
  cout << "couldn't find - " << integer << " in the array" << endl;
}

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

  auto arr_mult_by2 = multiplyByTwo(arr);

  findInteger(arr);
  findInteger(arr_mult_by2);

  return EXIT_SUCCESS;
}

Production:

found - 10 in the array
found - 10 in the array
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