如何为类型 T 的向量中的元素分配 space?

How do I allocate space for elements in vector for type T?

fn test<T>(arr: &mut [T]) {

    let vector=vec![] //what can I do here so that I have vector as vec with same size as arr and of type T.

}

fn main() {
    let xs = vec![1, 2, 3, 4, 5, 6];
    test(&mut xs);
}

如果我强制T具有默认特征,有什么解决方案吗? 我应该能够随机访问创建的向量,而不是串行推送。

使用with_capacity方法

fn test<T>(arr: &mut [T]) {
    let vector : Vec<T> =  Vec::with_capacity(arr.len());
    ...
}

注意它不分配元素,它只是使底层缓冲区足够大以容纳 N 个元素而无需额外的 re-allocations.

I should be able to randomly access the created vector, not push serially"

如果元素是 Clone,另一种分配元素的简单方法是简单地使用 vec! 宏:

fn test<T: Clone>(arr: &mut [T], item: T) {
    let vector : Vec<T> =  vec![item; arr.len()];
    ...
}

有几种方法可以做到这一点。如果你可以强制执行 T: Default 你可以使用 resize_with

fn test<T: Default>(arr: &mut [T]) {
    let v: Vec<T> = Vec::new();
    v.resize_with(arr.len(), Default::default);
}

否则,您可以强制执行 T: Clone 并使用 resize 并为元素提供初始值:

fn test<T: Clone>(arr: &mut [T], initial: T) {
    let v: Vec<T> = Vec::new();
    v.resize(arr.len(), initial);
}

vec宏可以接受two-arguments形式,其中第一个是将重复的元素,第二个是重复元素的数量。

看起来像这样:

fn test<T: Clone+Default>(arr: &mut [T]) {
    let vector = vec![T::default(); arr.len()];
}