Restituisce un vettore da una funzione in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione vector<T> func() per restituire un vettore da una funzione
  2. Usa la notazione vector<T> &func() per restituire un vettore da una funzione
Restituisce un vettore da una funzione in C++

Questo articolo introdurrà come restituire un vettore da una funzione in modo efficiente in C++.

Usa la notazione vector<T> func() per restituire un vettore da una funzione

Il ritorno in base al valore è il metodo preferito se restituiamo una variabile vettore dichiarata nella funzione. L’efficienza di questo metodo deriva dalla sua semantica di spostamento. Significa che restituire un vettore non copia l’oggetto, evitando così di sprecare ulteriore velocità / spazio. Dietro le quinte, punta il puntatore all’oggetto vettore restituito, fornendo così un tempo di esecuzione del programma più veloce di quanto avrebbe richiesto la copia dell’intera struttura o classe.

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

Produzione:

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

Usa la notazione vector<T> &func() per restituire un vettore da una funzione

Questo metodo utilizza la notazione return by reference, che è più adatta per restituire strutture e classi di grandi dimensioni. Si noti che non restituisce il riferimento della variabile locale dichiarata nella funzione stessa perché porta a un riferimento penzolante. Nell’esempio seguente, passiamo il vettore arr per riferimento e lo restituiamo anche come riferimento.

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

Produzione:

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