Übergeben den Vektor als Referenz in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Notation vector<T> &arr, um einen Vektor als Referenz in C++ zu übergeben
  2. Verwenden Sie die Notation const vector<T> &arr, um einen Vektor als Referenz in C++ zu übergeben
Übergeben den Vektor als Referenz in C++

Dieser Artikel zeigt verschiedene Methoden zum Übergeben eines Vektors als Referenz in C++.

Verwenden Sie die Notation vector<T> &arr, um einen Vektor als Referenz in C++ zu übergeben

std::vector ist eine übliche Methode zum Speichern von Arrays in C++, da sie ein dynamisches Objekt mit mehreren integrierten Funktionen zum Bearbeiten der gespeicherten Elemente bereitstellen. Beachten Sie, dass Vektor einen ziemlich großen Speicherbedarf haben kann. Daher sollten Sie dies sorgfältig berücksichtigen, wenn Sie sie an Funktionen übergeben. Normalerweise ist es die beste Vorgehensweise, als Referenz zu übergeben und die Kopie des gesamten Objekts für den Funktionsumfang auszuweichen.

Im folgenden Beispiel zeigen wir eine Funktion, die einen einzelnen Vektor von int als Referenz verwendet und seine Elemente modifiziert. Vektor-Elemente werden vor und nach dem Aufruf multiplyByTwo in der Hauptfunktion gedruckt. Beachten Sie, dass wir, obwohl wir den Rückgabewert in einer neuen Variablen arr_mult_by2 speichern, mit dem ursprünglichen Namen arr darauf zugreifen können, da die Elemente im selben Objekt geändert wurden und keine neue Kopie zurückgegeben wurde.

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

Ausgabe:

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

Verwenden Sie die Notation const vector<T> &arr, um einen Vektor als Referenz in C++ zu übergeben

Andererseits kann garantiert werden, dass die übergebene Referenz zur Änderung in der Funktionsdefinition zugänglich ist. Diese Funktion wird mit dem Qualifier-Schlüsselwort const bereitgestellt, das den Compiler anweist, Änderungen am angegebenen Objekt im aktuellen Funktionsumfang zu verbieten. Beachten Sie, dass dies als optionales Detail erscheint, das von einem Entwickler nicht betont werden muss. Manchmal können diese Schlüsselwörter dem Compiler jedoch helfen, den Maschinencode für eine bessere Leistung zu optimieren.

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

Ausgabe:

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

Verwandter Artikel - C++ Vector