gpt4 book ai didi

vector - Vec 和 &[struct] 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 07:48:17 26 4
gpt4 key购买 nike

我经常发现自己遇到这样的错误:

mismatched types: expected `collections::vec::Vec<u8>`, found `&[u8]` (expected struct collections::vec::Vec, found &-ptr)

据我所知,一个是可变的,一个不是,但我不知道如何在这两种类型之间切换,即采用 &[u8]并将其设为 Vec<u8>反之亦然。

它们有什么区别?和String一样吗和 &str

最佳答案

Is it the same as String and &str?

是的。 Vec<T>&[T] 的拥有变体. &[T]是对一组 T引用 s 在内存中按顺序排列(又名切片)。它表示指向项目开头和项目数量的指针。引用指的是您不拥有的东西,因此您可以使用它执行的操作集是有限的。有一个可变变体 ( &mut [T] ),它允许您改变切片中的项目。但是,您无法更改切片中的数量。换句话说,您不能改变切片本身。

take a &[u8] and make it a Vec

对于这个特定案例:

let s: &[u8]; // Set this somewhere
Vec::from(s);

但是,这必须分配不在堆栈上的内存,然后将每个值复制到该内存中。它比其他方式更昂贵,但对于特定情况可能是正确的做法。

or vice versa

let v = vec![1u8, 2, 3];
let s = v.as_slice();

这基本上是“免费”的 v仍然拥有数据,我们只是提供对它的引用。这就是为什么许多 API 会在有意义的时候尝试获取切片。

关于vector - Vec<struct> 和 &[struct] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com