Zum Inhalt springen

Borgen

fn main() {
let mut v = vec![1, 2, 3];
for i in &mut v {
v.push(*i);
}
println!("{} {} {}", v[3], v[4], v[5]);
}

Obwohl v mutabel geborgt wird, erlaubt dies nur die Mutation von i innerhalb der for-Schleife, nicht aber von v selbst. Daher führt der Aufruf von v.push zu einem Ownership-Fehler.


fn main() {
let mut v: Vec<i32> = vec![1, 2, 3];
let mut v2: Vec<&mut i32> = Vec::new();
for i in &mut v {
v2.push(i);
}
*v2[0] = 5;
let a = *v2[0];
let b = v[0];
println!("{a} {b}");
}

i hat den Typ &mut i32, was bedeutet, dass es ein Zeiger auf eine Zahl innerhalb von v ist. Wenn wir also i in v2 pushen, enthält v2 Zeiger auf v. Folglich mutiert das Mutieren von v2[0] tatsächlich v[0].