gpt4 book ai didi

vector - Vec 上 set_len 操作的安全性,具有预定义的容量

转载 作者:行者123 更新时间:2023-11-29 07:58:18 25 4
gpt4 key购买 nike

在已声明容量的 Vec 上调用 set_len 是否安全?像这样:

let vec = unsafe {
let temp = Vec::with_capacity(N);
temp.set_len(N);
temp
}

在添加任何元素之前,我需要我的 Vector 大小为 N。

查看文档:

我有点困惑。文档说 with_capacity 不会改变长度,set_len 说调用者必须确保 vector 有适当的长度。这样安全吗?

我需要这个的原因是因为我正在寻找一种方法来声明大小为 N 的可变缓冲区 (&mut [T]) 并且 Vec 似乎适合账单最好。我只是想避免让我的类型实现 vec![0;n] 会带来的克隆。

最佳答案

文档只是有点模棱两可。措辞可能会更好。您的代码示例与以下等效堆栈一样“安全”:

let mut arr: [T; N] = mem::uninitialized();

这意味着只要您在读取数组元素之前对其进行写入就可以了。如果你在写作之前先阅读,你就会打开通往nasal demons 的大门。和内存不安全。

I just wanted to avoid clone that vec![0;n] would bring.

llvm 会将其优化为单个 memset。

关于vector - Vec 上 set_len 操作的安全性,具有预定义的容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979334/

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