Iteration with .iter() gives temporary references. If you want the elements by value, then you need to dereference or clone them, or use .into_iter() instead.

vec.iter().copied().map(|x| "x is a value, copied from vec")

vec.iter().cloned().map(|x| "x is a value, cloned from vec")

vec.iter().map(|x| "x is a reference, borrowed from vec")

vec.iter().map(|&x| "x is a value, copied from vec using dereferencing")

vec.into_iter().map(|x| "x is a value, removed from vec")

BTW: & in closure arguments may seem backwards, because that's a pattern, not a type. The syntax for args is |pattern:type|.

See how it works with for … in in the Rust Playground.