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

标签 vector rust iterator borrow-checker mutability

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

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

最佳答案

使用iter_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 }]
}

playground

关于vector - 如何在迭代过程中改变向量的项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62627760/

相关文章:

c++ - 使用 OpenMesh 遍历边并获取它们的顶点

c++ - 将 vector 从 c++ dll 重新调整到另一个 c++ exe 时出现问题

c++ - 这个 std::vector 构造函数中发生了什么?

c++ - std::vector 向下调整大小

python - 如何获取手套向量的特征名称

rust - 如何在选项数组中正确分配值?

rust - 如何在 Rust 中正确实现 Error::cause?

rust - 如何解决可能的乘法溢出以获得正确的模运算?

c++ - 如何检查一个类是否完全符合给定的一组特征?

c++ - find_if 找到一个不等于某物的元素