0

寻找一种方法来推动 Vec<Vec<>> 和它的内部 Vec<>。我确实理解它为什么会失败,但仍然很难找到一些优雅的方法来解决它。

fn example() {
    let mut vec: Vec<Vec<i32>> = vec![];
    vec.push(vec![]);
    for i in &mut vec {
        i.push(1);
        if vec.len() < 10 {
            vec.push(vec![]); // second mut borrow
        }
    }
}
4

1 回答 1

1

借用检查器不允许您通过引用迭代向量并在迭代期间对其进行修改。原因是修改向量可以重新分配其存储空间,这会使用于迭代的引用无效。(还有一个问题是迭代一个变化的向量意味着什么,你想访问迭代期间添加的元素还是只访问最初存在的元素。)

允许您做您想做的最简单的修复是使用索引迭代向量:

fn example() {
    let mut vec: Vec<Vec<i32>> = vec![];
    vec.push(vec![]);
    let mut ind = 0;
    while ind < vec.len() {
        let i = &mut vec[ind];
        i.push(1);
        if vec.len() < 10 {
            vec.push(vec![]);
        }
        ind += 1;
    }
}
于 2021-03-20T10:51:36.727 回答