Passa vettore per riferimento in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione vector<T> &arr per passare un vettore per riferimento in C++
  2. Usa la notazione const vector<T> &arr per passare un vettore per riferimento in C++
Passa vettore per riferimento in C++

Questo articolo illustrerà più metodi su come passare un vettore per riferimento in C++.

Usa la notazione vector<T> &arr per passare un vettore per riferimento in C++

std::vector è un modo comune per memorizzare array in C++, poiché forniscono un oggetto dinamico con più funzioni incorporate per manipolare gli elementi memorizzati. Nota che vector può avere un footprint di memoria abbastanza grande, quindi dovresti considerare attentamente quando li passi alle funzioni. Di solito, è consigliabile passare per riferimento ed eludere la copia dell’intero oggetto per l’ambito della funzione.

Nell’esempio seguente, dimostriamo una funzione che prende un singolo vettore di int s per riferimento e modifica i suoi elementi. Gli elementi vector vengono stampati prima e dopo la chiamata multiplyByTwo nella funzione principale. Nota che, anche se memorizziamo il valore di ritorno in una nuova variabile arr_mult_by2, potremmo accedervi con il nome originale arr poiché gli elementi sono stati modificati nello stesso oggetto e non è stata restituita alcuna nuova copia.

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

Produzione:

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

Usa la notazione const vector<T> &arr per passare un vettore per riferimento in C++

D’altra parte, si può garantire che il riferimento passato sia accessibile per la modifica nella definizione della funzione. Questa caratteristica è fornita con la parola chiave del qualificatore const che dice al compilatore di proibire qualsiasi modifica a un dato oggetto nell’ambito della funzione corrente. Si noti che questo può sembrare un dettaglio opzionale che non ha bisogno di essere sottolineato da uno sviluppatore, ma a volte queste parole chiave possono aiutare il compilatore a ottimizzare il codice macchina per prestazioni migliori.

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

Produzione:

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

Articolo correlato - C++ Vector