Rust 迭代器或切片滑动可变窗口

Mic*_*ell 1 rust borrow-checker

我尝试使用迭代器进行“正确的”Rust 版本的冒泡排序。明显的代码包含以下几行:

let mut vi = v.windows(2);
for mut i in vi {
    if i[0] > i[1] {
        i.swap(0, 1);
    }
}

Run Code Online (Sandbox Code Playgroud)

但我得到了错误

let mut vi = v.windows(2);
for mut i in vi {
    if i[0] > i[1] {
        i.swap(0, 1);
    }
}

Run Code Online (Sandbox Code Playgroud)

有没有办法从迭代器获取对向量元素对的可变引用?

Pet*_*all 5

根据文档,没有slice::windows_mut,这是您想要可变地访问值的。但是,它继续建议Cell::as_slice_of_cells解决您的具体问题:

use std::cell::Cell;

let vi = Cell::as_slice_of_cells(Cell::from_mut(&mut v)).windows(2);
for i in vi {
    if i[0] > i[1] {
        i[0].swap(&i[1]);
    }
}
Run Code Online (Sandbox Code Playgroud)