rust 通过引用将Vec传入函数

llmtgqce  于 2023-02-04  发布在  其他
关注(0)|答案(3)|浏览(176)

我在传递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!
}
2lpgd968

2lpgd9681#

我可能是错的,但通常我只是在函数中传递东西时在末尾加上一个.clone()

cvxl0en2

cvxl0en22#

如果不需要添加或删除向量中的元素,请使用slice(&[T])或mutable slice(&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());

不可变切片允许您读取元素或创建子切片;可变切片还允许修改元素。2但是切片不能增长--它们只是一个视图,可以看到某个向量。
看起来你需要在向量上添加新元素,正如我所说的,你不能用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);
pqwbnv8z

pqwbnv8z3#

使用primeFactors.as_slice()(或primeFactors.as_mut_slice(),如果要就地修改向量的内容)将向量作为借用指针传递。
更改函数以接受类型为&[T]的借用切片。

相关问题