2016-08-01 22 views
1

Ich habe eine let mut stack: Vec<usize> = vec![5, 7, 1] von unterschiedlicher Länge. Irgendwann möchte ich das letzte Element des stack um eins erhöhen. Ich habe versucht, stack.last_mut().unwrap() += 1 (ich weiß, das stack nicht leer sein), aber der Compiler beschwertInkrement letztes Element von Vec <usize>

error: binary assignment operation `+=` cannot be applied to type `&mut _` [--explain E0368] 
--> src/main.rs:3:5 
3 |>  stack.last_mut().unwrap() += 1; 
    |>  ^^^^^^^^^^^^^^^^^^^^^^^^^ 

error: invalid left-hand side expression [--explain E0067] 
--> src/main.rs:3:5 
3 |>  stack.last_mut().unwrap() += 1; 
    |>  ^^^^^^^^^^^^^^^^^^^^^^^^^ 

Natürlich kann ich zum ersten Mal das letzte Element aus dem Stapel pop, erhöhen Sie es und fügen Sie es wieder, aber ist es ein einfacher Weg?

Antwort

4

Dereferenziere vor Inkrementieren:

fn main() { 
    let mut stack = vec![1, 3, 5]; 
    *stack.last_mut().unwrap() += 1; 
    println!("{:?}", stack); 
} 
+2

Auch Bedürfnisse stapeln wandelbar sein. (Ihr Code macht das offensichtlich; ich weise nur auf die Änderung der Frage hin) – Kevin