Vec<T>-Slices in Rust: Wie man sie erstellt und 2025 den Durchblick behält

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Vec<T>-Slices in Rust: Wie funktionieren sie und warum braucht man sie?

\n\n

Wenn Sie jemals in Rust programmiert und sich gefragt haben "How do I get a slice of a Vec<T> in Rust?" – sind Sie nicht allein. Dies ist eine der beliebtesten Fragen auf Stack Overflow mit tausenden von Aufrufen. Und das aus gutem Grund: Die Arbeit mit Vektoren und ihren Slices ist eine grundlegende Fähigkeit, ohne die man sich kein ernsthaftes Rust-Projekt vorstellen kann.

\n\n

In diesem Artikel zeigen wir nicht nur, wie man einen Slice erstellt. Wir behandeln die Best Practices für 2025, lernen, typische Fallstricke zu vermeiden, und verstehen, warum Rust uns überhaupt so viel über Ausleihen nachdenken lässt. Los geht's!

\n\n

Was ist ein Slice in Rust?

\n\n

Bevor wir einen Slice erstellen, lassen Sie uns klären, was das ist. Ein Slice ist ein Verweis auf eine zusammenhängende Sequenz von Elementen im Speicher. In Rust wird ein Slice als &[T] bezeichnet. Es ist keine besitzende Datenstruktur – es "blickt" lediglich auf einen Teil der Daten, die jemand anderem gehören (z. B. einem Vektor oder Array).

\n\n

Der Hauptvorteil von Slices ist die Sicherheit. Der Rust-Compiler garantiert, dass Sie nicht über die Speichergrenzen hinausgehen, und das Ausleihsystem verhindert, dass Sie Daten ändern, während aktive Verweise darauf existieren.

\n\n

Warum nicht direkt den Vektor verwenden?

\n\n

Ein Vektor (Vec<T>) ist eine besitzende Struktur. Wenn Sie ihn an eine Funktion übergeben, verschieben Sie ihn (verlieren den Zugriff) oder übergeben einen Verweis. Slices bieten Ihnen Flexibilität: Sie können nur einen Teil der Daten übergeben, ohne sie zu kopieren oder die Kontrolle über den ursprünglichen Vektor zu verlieren.

\n\n

Angenommen, Sie arbeiten mit einem großen Datenarray und möchten einen Ausschnitt davon zur Analyse an eine Funktion übergeben. Ein Slice ist das ideale Werkzeug: Er ist leichtgewichtig (nur zwei Wörter: Zeiger und Länge) und sicher.

\n\n

Hauptmethoden zum Erstellen eines Vec<T>-Slices

\n\n

Kommen wir zur Praxis. Es gibt mehrere Möglichkeiten, einen Slice aus einem Vektor zu erstellen. Wir betrachten die gängigsten und bequemsten.

\n\n

1. Der Indexierungsoperator: &vec[start..end]

\n\n

Der direkteste Weg ist die Verwendung des Bereichsoperators ..:

\n\n
let vec = vec![1, 2, 3, 4, 5];\nlet slice: &[i32] = &vec[1..4]; // Slice von Index 1 bis 4 (exklusive 4)\nprintln!("{:?}", slice); // [2, 3, 4]
\n\n

Diese Methode verwendet eine Laufzeit-Grenzprüfung. Wenn Sie die Grenzen des Vektors überschreiten, gerät das Programm in Panik (panic). Für Übungsbeispiele ist das in Ordnung, aber im Produktionscode sollte man vorsichtig sein.

\n\n

Sie können verschiedene Formen von Bereichen verwenden:

\n\n
    \n
  • &vec[..] – der gesamte Vektor
  • \n
  • &vec[2..] – ab Index 2 bis zum Ende
  • \n
  • &vec[..3] – vom Anfang bis Index 3 (exklusive)
  • \n
  • &vec[1..=3] – von 1 bis einschließlich 3
  • \n
\n\n

2. Die Methode .as_slice()

\n\n

Diese Methode gibt einen Slice auf den gesamten Vektor zurück. Sie ist sicherer als &vec[..], da sie die Absicht explizit ausdrückt:

\n\n
let vec = vec![10, 20, 30];\nlet slice: &[i32] = vec.as_slice();\nprintln!("{:?}", slice); // [10, 20, 30]
\n\n

Die Methode as_slice() ist besonders nützlich, wenn Sie betonen möchten, dass Sie mit einem Slice und nicht mit einem Vektor arbeiten. Dies macht den Code lesbarer und selbstdokumentierend.

\n\n

3. Erstellen eines veränderlichen Slices: as_mut_slice()

\n\n

Wenn Sie die Elemente innerhalb des Slices (aber nicht den Vektor selbst) ändern müssen, verwenden Sie as_mut_slice():

\n\n
let mut vec = vec![1, 2, 3];\nlet slice: &mut [i32] = vec.as_mut_slice();\nslice[0] = 100;\nprintln!("{:?}", vec); // [100, 2, 3]
\n\n

Beachten Sie: Der Vektor muss als mut deklariert sein. Außerdem können Sie nicht gleichzeitig einen unveränderlichen und einen veränderlichen Slice haben – dies würde die Ausleihregeln verletzen.

\n\n

Wie man einen Unte

Blogs

Buchempfehlungen