rust 如何使用mut ref向切片的vec追加元素?

w41d8nur  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(162)
fn main()
{
    let mut a = vec!["1".to_string(), "2".to_string()];
    let r: &mut [String] = &mut a;
    r.push("1".to_string());
}

字符串
如果不可能,我想知道为什么不能使用切片的mut ref来完成。

Compiling Practise v0.1.0 (C:\My Files\Coding\Reading_Material\Rust\Practise)
error[E0599]: no method named `push` found for mutable reference `&mut [String]` in the current scope
 --> src\main.rs:4:7
  |
4 |     r.push("1".to_string());
  |       ^^^^ method not found in `&mut [String]`

For more information about this error, try `rustc --explain E0599`.
error: could not compile `Practise` due to previous error

uajslkp6

uajslkp61#

Vec包含指针、长度和容量。当将新元素推送到Vec时,如果为length < capacity,则有额外的空间可供新元素使用。否则,Vec可以被重新分配,从而增加生成length < capacity的容量(并可能改变指针)。
一个切片只包含一个指针和一个长度。由于不存在容量,因此不可能知道是否存在可用于新元素的附加容量或增加容量。
因此,对切片的可变引用只允许修改现有元素,而不允许添加新元素。只有对Vec的可变引用才能执行需要知道容量的修改。

相关问题