如何在迭代时修改容器?

时间:2017-11-16 20:53:07

标签: rust iteration

我指的是容器本身,而不是容器的内容。我想插入,删除,追加等。我在下面提出了我的问题:

fn f() {
    let mut numbers = vec![10, 11, 12, 14, 15];

    for index in 0..numbers.len() {
        process(numbers[index]);

        if numbers[index] == 12 {
            numbers.insert(index + 1);
        }
    }
}

函数f可以工作,但它在容器上循环的次数不会随着容器大小的变化而改变。

fn g() {
    let mut numbers = vec![10, 11, 12, 14, 15];

    for (index, num) in numbers.iter().enumerate() {
        process(num);

        if num == 12 {
            numbers.insert(index + 1);
        }
    }
}

函数g看起来像是最惯用的Rust方法,但由于发生了非法的可变借用引用而无法编译。

fn h() {
    let mut numbers = vec![10, 11, 12, 14, 15];

    let mut index = 0;
    while index < numbers.len() {
        process(numbers[index]);

        if numbers[index] == 12 {
            numbers.insert(index + 1);
        }

        index += 1;
    }
}

函数h是唯一可行的版本,但它似乎不是正确的方法。我基本上只是使用for循环模拟C样式while循环。我希望有人知道更简洁的写作方式,最好用for循环代替。

0 个答案:

没有答案