Three ways to iterate, and the difference is what each hands you:
| method | yields | collection after |
| --- | --- | --- |
| .iter() | &T | untouched |
| .iter_mut() | &mut T | mutated in place |
| .into_iter() | T | consumed |
let doubled: Vec<i32> = data.iter().map(|n| n * 2).collect(); // data survives
for n in data.iter_mut() { *n += 10; } // data changes
let owned: Vec<String> = data.into_iter().map(...).collect(); // data is gone
