增加 Vec<usize> 的最后一个元素

3

我有一个长度不同的 let mut stack: Vec<usize> = vec![5, 7, 1]。在程序的某个时刻,我想将 stack 的最后一个元素加一。我尝试了 stack.last_mut().unwrap() += 1(我知道 stack 不会为空),但编译器报错。

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;
  |>     ^^^^^^^^^^^^^^^^^^^^^^^^^

当然,我可以先从堆栈中弹出最后一个元素,将其递增后再添加回去,但是有更简单的方法吗?
1个回答

7

在递增之前取消引用:

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

2
同时,栈需要是可变的。(你的代码已经实现了这一点,显然;我只是指出与问题的不同之处) - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接