Transmitir vetor por referência em C++

Jinku Hu 12 outubro 2023
  1. Use a notação vector<T> &arr para passar um vetor por referência em C++
  2. Use a notação const vector<T> &arr para passar um vetor por referência em C++
Transmitir vetor por referência em C++

Este artigo demonstrará vários métodos sobre como passar um vetor por referência em C++.

Use a notação vector<T> &arr para passar um vetor por referência em C++

std::vector é uma maneira comum de armazenar arrays em C++, pois eles fornecem um objeto dinâmico com múltiplas funções embutidas para manipular os elementos armazenados. Observe que vetor pode ocupar uma grande quantidade de memória, portanto, deve-se considerar cuidadosamente ao passá-los para as funções. Normalmente, é a melhor prática passar por referência e evitar a cópia do objeto inteiro para o escopo da função.

No exemplo a seguir, demonstramos uma função que pega um único vetor de int por referência e modifica seus elementos. Os elementos vector são impressos antes e depois da chamada multiplyByTwo na função principal. Observe que, embora armazenemos o valor de retorno em uma nova variável arr_mult_by2, poderíamos acessá-la com o nome arr original, pois os elementos foram modificados no mesmo objeto e nenhuma nova cópia foi retornada.

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

Resultado:

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

Use a notação const vector<T> &arr para passar um vetor por referência em C++

Por outro lado, pode-se garantir que a referência passada estaria acessível para modificação na definição da função. Este recurso é fornecido com a palavra-chave do qualificador const que diz ao compilador para proibir qualquer modificação no objeto fornecido no escopo da função atual. Observe que isso pode parecer um detalhe opcional que não precisa ser enfatizado por um desenvolvedor, mas às vezes essas palavras-chave podem ajudar o compilador a otimizar o código de máquina para um melhor desempenho.

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

Resultado:

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

Artigo relacionado - C++ Vector