在这种情况下,我认为我的引用必须是可变的,因为我正在对数组进行排序,而它又必须是引用,因为我想使用相同的向量来计算均值和众数。我已经尝试过在函数签名和变量声明中使用mut
的各种组合,但无法对其进行编译(包括错误消息中的建议,但可能未正确实现)。
我正在尝试实现一个简单的中值函数(我知道可能是一种内置方式,但是这是作为练习进行的)
fn main() {
let mut v = vec![1, 2, 3, 4, 5, 5, 4, 3];
println!("{}", median(&v));
}
fn median(mut vec: &Vec<i32>) -> usize {
vec.sort();
let len: usize = vec.len();
let middle = len as i32 / 2;
println!("{}", &middle);
0
}
这会出现以下错误
error[E0596]: cannot borrow `*vec` as mutable, as it is behind a `&` reference
--> src/main.rs:7:5
|
6 | fn median(mut vec: &Vec<i32>) -> usize {
| --------- help: consider changing this to be a mutable reference: `&mut std::vec::Vec<i32>`
7 | vec.sort();
| ^^^ `vec` is a `&` reference, so the data it refers to cannot be borrowed as mutable