This is moving the reference (named cells) and not the Vec... Not sure how to explain that further. You can pass &mut cells instead, which creates a new reference each time the loop is started, instead of creating one reference at the beginning of the function.
The bare version works with shared references because they are Copy. Mut references aren't.