首页 > 解决方案 > 如何更新 VecDeque 中的值

问题描述

我想将值存储在 VecDeque 中并在它更新值之后。

最小的例子:

use std::collections::VecDeque;

fn main() {
    let mut v = VecDeque::new();
    let mut str1 = String::from("Hello");

    v.push_back(str1);

    let str = String::from(" World");
    str1.push_str(&str);
}

错误:

   Compiling playground v0.0.1 (/playground)
error[E0382]: borrow of moved value: `str1`
  --> src/main.rs:10:5
   |
5  |     let mut str1 = String::from("Hello");
   |         -------- move occurs because `str1` has type `std::string::String`, which does not implement the `Copy` trait
6  |     
7  |     v.push_back(str1);
   |                 ---- value moved here
...
10 |     str1.push_str(&str);
   |     ^^^^ value borrowed here after move

error: aborting due to previous error

问题:

如何将项目添加到集合并在它更新此项目后?

标签: rust

解决方案


利用back_mut

v.back_mut().unwrap().push_str(&str);

或者只是将引用存储在双端队列中

v.push_back(&mut str1);

推荐阅读