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

问题描述 投票:0回答:1

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

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

但我收到错误

`i` is a `&` reference, so the data it refers to cannot be borrowed as mutable

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

rust borrow-checker
1个回答
0
投票

根据docs,没有

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].get() > i[1].get() {
        i[0].swap(&i[1]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.