我想要一个函数来控制和改变rust中的向量。下面是一个简化的版本:
fn foo(vec: &mut Vec<i32>) {
for (i, element) in vec.iter().enumerate() {
// Some checks here
vec[(*element) as usize] = i as i32;
}
}
fn main() {
let mut bar: Vec<i32> = vec![1, 0, 2];
foo(&mut bar);
}
这段代码无法编译,因为在foo
中同时存在不可变和可变的vec
借位。我试图通过将vec
复制到一个单独的副本来解决这个问题,但这不起作用,而且也不会很漂亮。正确的方法是什么?
2条答案
按热度按时间j8yoct9x1#
如果你想改变
Vec
,正确的方法是 mutably 而不是immutably迭代:fxnxkyjh2#
通过使用如下索引访问,可以避免借用整个
Vec
: