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

etk*_*220 2 arrays vector rust

我正在Rust中重新实现哈希表.最终我想让它分布式并具有法定数量,但是现在它是单个系统上的哈希表.

我希望将表的大小作为参数传入,因此表应该是动态调整大小的.我不希望表增长,因为这将使我的哈希函数混乱,该函数使用模运算.我看到了几个选择:

  1. 数组 - 无法动态调整大小
  2. 矢量 - 可以成长
  3. 切片 - 可以动态调整大小并且不能增长,但只是对Vecs和数组的视图,所以我还需要一个Vec/数组?

在C++中,我可以使用动态大小的数组.这里最好的选择是什么?

She*_*ter 10

盒装切片是动态调整大小,长度不能改变一旦创建,并且它拥有所包含的数据:

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

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


但是,你是否会获得任何性能优势是可疑的.A Vec是三个指针大小的值(数据,大小,容量).A Box<[T]>只有两个:数据和大小.在大多数情况下,具有额外值的开销是微不足道的.

主要好处是保证尺寸不会改变 ; 你不会静态地知道它是一定的尺寸.如果类型级别的数字发生,可能会发生这种保证.

也可以看看: