gpt4 book ai didi

rust - 通过引用将 Vec 传递给函数

转载 作者:行者123 更新时间:2023-11-29 07:45:06 25 4
gpt4 key购买 nike

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

最佳答案

如果不需要向向量添加或删除元素,请使用切片 (&[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());

不可变切片允许您读取元素或创建子切片;可变切片还允许修改元素。但是切片不能增长——它们只是一些向量的 View 。

看起来您需要向矢量追加新元素。正如我所说,您将无法使用 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);

关于rust - 通过引用将 Vec 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102615/

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