我正在遍历一个向量,我想更改其中一个元素。
fn main() {
let mut vector = vec![1, 2, 3, 4];
for (i, el) in vector.iter().enumerate() {
if i == 0 {
continue;
}
vector[i - 1] += el
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我编译器错误:
fn main() {
let mut vector = vec![1, 2, 3, 4];
for (i, el) in vector.iter().enumerate() {
if i == 0 {
continue;
}
vector[i - 1] += el
}
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么会发生这个错误。我借用 vector 作为枚举范围的生命周期不可变,然后尝试改变该范围内的内部,从而打破借用规则。我只是不明白如何正确地做到这一点。我想我需要为枚举可变地借用?
我尝试了 的各种组合mut,&mut并且每个组合都遇到了不同的编译器错误。我知道我可以把它做成 aVec<Cell<i32>>并以这种方式改变内容,但这对于这样一个简单的例子来说似乎有点过分了。
使用索引。
fn main() {
let mut vector = vec![1, 2, 3, 4];
for i in 1..vector.len() {
vector[i - 1] += vector[i];
}
println!("{:?}", vector);
}
Run Code Online (Sandbox Code Playgroud)