Как получить изменяемые ссылки на два элемента массива одновременно?

fn change(a: &mut i32, b: &mut i32) {
    let c = *a;
    *a = *b;
    *b = c;
}

fn main() {
    let mut v = vec![1, 2, 3];
    change(&mut v[0], &mut v[1]);
}

Когда я компилирую код выше, он имеет ошибку:

error[E0499]: cannot borrow `v` as mutable more than once at a time
 --> src/main.rs:9:32
  |
9 |         change(&mut v[0], &mut v[1]);
  |                     -          ^   - first borrow ends here
  |                     |          |
  |                     |          second mutable borrow occurs here
  |                     first mutable borrow occurs here

Почему компилятор запрещает это?v[0] а такжеv[1] занимают разные позиции в памяти, поэтому использовать их вместе не опасно. И что мне делать, если я сталкиваюсь с этой проблемой?

Ответы на вопрос(6)

Ваш ответ на вопрос