Vektoren
Vektor-Zugriff Panik
Abschnitt betitelt „Vektor-Zugriff Panik“Welcher Aufruf dieser Funktion find_until führt zu einer Laufzeit-Panik?
fn find_until(v: &Vec<i32>, n: i32, til: usize) -> Option<usize> { for i in 0 .. til { if v[i] == n { return Some(i); } } return None;}Wenn til = 4 ist, versucht die for-Schleife bei einem Vektor der Länge 3, den Vektor mit i = 3 zu indizieren, was außerhalb der Grenzen liegt.
Diese Funktion gerät nicht in Panik, wenn n = 1 ist, da sie zurückkehrt, bevor der Index außerhalb der Grenzen erreicht wird.
Ownership nach push
Abschnitt betitelt „Ownership nach push“fn main() { let mut v = Vec::new(); let s = String::from("Hello "); v.push(s); v[0].push_str("world"); println!("original: {}", s); println!("new: {}", v[0]);}Vec::push verschiebt sein Argument, daher ist s nach dem Aufruf von v.push(s) nicht mehr verwendbar. Der Aufruf von println!("original: {}", s) ist daher nicht Ownership-sicher.
Move aus Vektor
Abschnitt betitelt „Move aus Vektor“fn main() { let v = vec![String::from("Hello ")]; let mut s = v[0]; s.push_str("world"); println!("{s}");}Nicht-kopierbare Typen können nicht durch Indexierung aus einem Vektor verschoben werden. Nur Methoden wie Vec::remove erlauben das Verschieben aus einem Vektor. Siehe Abschnitt 4.3
“Kopieren vs. Verschieben aus einer Sammlung”
für eine tiefere Erklärung, warum dies so ist.