我尝试使用迭代器做一个“正确的”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
有没有办法从迭代器获取对向量元素对的可变引用?
根据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]);
}
}