1/6

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