如何在迭代过程中改变向量的项?

2 iterator vector mutability rust borrow-checker

我有一个Vec结构体。Vec当使用迭代时,.iter()我想编辑for循环内的每个元素,但我收到一个错误,指出每个元素已被借用,我该如何解决这个问题?这是一个小代码示例:

struct complex_struct {
    attr1: i32
}
    
let elements: Vec<complex_struct> = generate_data();
    
for element in elements.iter() {
    element.attr1 = 0;
}
Run Code Online (Sandbox Code Playgroud)

kfe*_*v91 5

使用 theiter_mut从迭代器中获取可变元素:

#[derive(Debug)]
struct ComplexStruct {
    attr1: i32
}

fn main() {
    let mut elements: Vec<ComplexStruct> = vec![ComplexStruct { attr1: 5 }];

    for element in elements.iter_mut() {
        element.attr1 = 0;
    }
    
    dbg!(elements); // prints out [ComplexStruct { attr1: 0 }]
}
Run Code Online (Sandbox Code Playgroud)

操场