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

  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

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 <vector>
#include <iterator>

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 <vector>
#include <iterator>

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 |

Verwandter Artikel - C++ Vector

  • Vektor von Structs in C++ initialisieren
  • Zugriff auf Member-Funktionen vom Zeiger auf einen Vektor in C++