Pasar Vector por referencia en C++

Jinku Hu 12 octubre 2023
  1. Utilice la notación vector<T> &arr para pasar un vector por referencia en C++
  2. Utilice la notación const vector<T> &arr para pasar un vector por referencia en C++
Pasar Vector por referencia en C++

Este artículo demostrará varios métodos sobre cómo pasar un vector por referencia en C++.

Utilice la notación vector<T> &arr para pasar un vector por referencia en C++

std::vector es una forma común de almacenar matrices en C++, ya que proporcionan un objeto dinámico con múltiples funciones integradas para manipular los elementos almacenados. Tenga en cuenta que vector puede tener una huella de memoria bastante grande, por lo que se debe considerar cuidadosamente al pasarlos a funciones. Por lo general, es la mejor práctica pasar por referencia y evadir la copia de todo el objeto para el alcance de la función.

En el siguiente ejemplo, demostramos una función que toma un solo vector de int por referencia y modifica sus elementos. Los elementos vector se imprimen antes y después de la llamada multiplyByTwo en la función principal. Tenga en cuenta que, aunque almacenamos el valor de retorno en una nueva variable arr_mult_by2, podríamos acceder a él con el nombre original de arr ya que los elementos se modificaron en el mismo objeto y no se devolvió ninguna copia nueva.

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

Producción :

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

Utilice la notación const vector<T> &arr para pasar un vector por referencia en C++

Por otro lado, se puede garantizar que la referencia pasada sea accesible para su modificación en la definición de la función. Esta característica se proporciona con la palabra clave del calificador const que le dice al compilador que prohíba cualquier modificación al objeto dado en el alcance de la función actual. Tenga en cuenta que esto puede parecer un detalle opcional que no necesita ser enfatizado por un desarrollador, pero a veces estas palabras clave pueden ayudar al compilador a optimizar el código de la máquina para un mejor rendimiento.

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

Producción :

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

Artículo relacionado - C++ Vector