temp = temp.into_iter().rev().collect();
(0..cols).for_each(|col| vec[row][col] = temp[col]);
temp
владеет некоторой памятью
(0..cols).for_each
итерирует и вызывает переданную ему функцию cols раз
замыкание преданное в for_each захватывает vec по &mut ссылке, а temp по значению
на первой итерации temp[0] делает move в vec[row][0], так как в memory model Rust ни один тип не может существовать в виде "огрызка с дыркой", компилятор дописывает drop(temp) в конец функции
|col| vec[row][col] = temp[col]
, а так как temp захвачен замыканием по значению (по сути он является частью замыкания), то в конце итерации цикла внутри for_each еще и само замыкание дропается.
Другими словами for_each хочет от вас FnMut, а Вы ему дали только FnOnce.
Думаю Вам поможет одна из этих функций:
https://doc.rust-lang.org/beta/std/mem/fn.take.html
https://doc.rust-lang.org/beta/std/mem/fn.replace.html
index out of bounds: the len is 2 but the index is 2
Это не ошибка компиляции, а runtime panic, которая говорит о там, что Вы вышли за границу слайса
P.S. я надеюсь у Вас усть понимание, что здесь O(n
3)?
while (0..rows).map(|r| vec[r].first().unwrap()).all(|&x| x == 0) {
(0..rows).for_each(|r| {vec[r].remove(0);});
};