Zurückgeben eines Vektors aus einer Funktion in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der vector<T> func() Notation zur Rückgabe eines Vektors aus einer Funktion
  2. Verwenden Sie die vector<T> &func() Notation, um den Vektor von einer Funktion zurückzugeben
Zurückgeben eines Vektors aus einer Funktion in C++

Dieser Artikel stellt vor, wie ein Vektor aus einer Funktion effizient in C++ zurückgegeben werden kann.

Verwenden der vector<T> func() Notation zur Rückgabe eines Vektors aus einer Funktion

Die Rückgabe nach Wert ist die bevorzugte Methode, wenn wir eine in der Funktion deklarierte vector-Variable zurückgeben. Die Effizienz dieser Methode ergibt sich aus ihrer Bewegungssemantik. Das bedeutet, dass bei der Rückgabe eines vector das Objekt nicht kopiert wird, wodurch die Verschwendung zusätzlicher Geschwindigkeit/Raum vermieden wird. Unter der Haube zeigt der Zeiger auf das zurückgegebene vector-Objekt, was eine schnellere Programmausführungszeit ermöglicht, als das Kopieren der gesamten Struktur oder Klasse erfordert hätte.

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

Ausgabe:

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

Verwenden Sie die vector<T> &func() Notation, um den Vektor von einer Funktion zurückzugeben

Diese Methode verwendet die Rückgabe durch Referenznotation, die sich am besten für die Rückgabe großer Structs und Klassen eignet. Beachten Sie, dass die Referenz der in der Funktion selbst deklarierten lokalen Variablen nicht zurückgegeben wird, da dies zu einer baumelnden Referenz führt. Im folgenden Beispiel übergeben wir den arr-Vektor per Referenz und geben ihn auch als Referenz zurück.

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

Ausgabe:

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