gpt4 book ai didi

arrays - Rust 中不可调整大小的动态长度数组的最佳选择是什么?

转载 作者:行者123 更新时间:2023-11-29 08:01:42 25 4
gpt4 key购买 nike

我正在用 Rust 重新实现一个哈希表。最终我想让它分布式并拥有法定人数,但现在它是单个系统上的哈希表。

我希望将表的大小作为参数传入,以便表的大小应该是动态的。我不希望表增长,因为这会扰乱我的散列函数,该散列函数通过模运算运行。我看到几个选项:

  1. 数组 - 不能动态调整大小
  2. 载体 - 可以生长
  3. 切片 - 可以动态调整大小且不能增长,但只是 Vec 和数组的 View ,所以我还是需要一个 Vec/array 吗?

在 C++ 中,我可以只使用一个动态大小的数组。这里的最佳选择是什么?

最佳答案

一个 boxed slice 是动态调整大小的,长度一旦创建就不能改变,并且它拥有包含的数据:

let the_vec: Vec<i32> = vec![1, 2, 3];
let the_boxed_slice: Box<[i32]> = the_vec.into_boxed_slice();

这里不需要类型,它们只是出于教学原因而存在。


但是,您是否会获得任何性能 优势值得怀疑。 Vec是三个指针大小的值(数据、大小、容量)。 Box<[T]>只有两个:数据和大小。在大多数情况下,拥有额外值的开销很小。

主要的好处是静态保证大小不会改变;您不会静态地知道它的大小。如果type-level numbers,这样的保证可能发生曾经发生过。

另见:

关于arrays - Rust 中不可调整大小的动态长度数组的最佳选择是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45378744/

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