簡體   English   中英

Rust 雙mut借用循環

[英]Rust double mut borrow in loops

尋找一種方法來推動 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
        }
    }
}

借用檢查器不允許您通過引用迭代向量並在迭代期間對其進行修改。 原因是修改向量可以重新分配其存儲空間,這會使用於迭代的引用無效。 (還有一個問題是迭代一個變化的向量意味着什么,你想訪問在迭代期間添加的元素還是只訪問最初存在的元素。)

允許您做您想做的最簡單的修復是使用索引迭代向量:

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM