通过引用将Vec传递给函数

时间:2014-06-08 03:04:47

标签: rust

我在将Vec<u64>传递给函数时遇到了一些麻烦而没有移动它。我有一个函数find_factors(mut n: u64, mut fctrs: Vec<u64>),我现在正在调用main,如下所示:

fn main() {
    let mut primeFactors: Vec<u64> = Vec::new();
    find_factors(1134 as u64, primeFactors);
}

我现在被迫在find_factors函数中循环并打印出我的向量,因为我不确定如何通过引用传递Vec<u64>而不是移动它。我怎么能做到这一点?我想做的例子:

fn main() {
    let mut primeFactors: Vec<u64> = Vec::new();
    find_factors(1134 as u64, primeFactors);

    //for ....
        //print vector in main!
}

2 个答案:

答案 0 :(得分:15)

如果您不需要在向量中添加或删除元素,请使用切片(&[T])或可变切片(&mut [T]):

fn find_factors(n: u64, prime_factors: &mut [u64]) { ... }

let mut prime_factors: Vec<u64> = Vec::new();
find_factors(1134 as u64, prime_factors.as_mut_slice());

不可变切片允许您读取元素或创建子句;可变切片还允许修改元素。但切片无法生长 - 它们只是对某些向量的看法。

看起来你需要在向量中添加新元素。正如我所说,你不能用切片做到这一点;你需要使用可变引用传递向量本身:

fn find_factors(n: u64, prime_factors: &mut Vec<u64>) {
    // here you can call e.g. prime_factors.push(...)
}

let mut prime_factors: Vec<u64> = Vec::new();
find_factors(1134 as u64, &mut prime_factors);

答案 1 :(得分:1)

使用primeFactors.as_slice()(或primeFactors.as_mut_slice()如果要修改矢量的内容)将矢量作为借用指针传递。

更改您的函数以接受借用的&[T]类型的切片。