Normally an iterator iterates _over_ a Vec or other collection, without moving or destroying the Vec.
There's also iter_mut which iterates over the Vec but allows you to mutate elements in-place.
Those are the 3 big groups of iterators: Immutable, mutable, and the ones that consume (i.e. destroy) the vector.
I find that, similar to my experience with Rails (and Rails developers), once you've drunk the Kool aide, it starts to make sense. You are fluent in the language that is being used and you can't think any other way about it. Even if it is awkward, it seems normal and obvious. But when you first approach it, it can be hard to acquire the idea.
Now that I think about it, how does into_iter() work on a Vec? Is it just copying the data out of the Vec anyway? Because the data in a Vec is allocated on the heap, so how can you get an owned object that isn't just a reference (pointer) to the heap memory without copying?
If that's the case, is the only benefit of into_iter() that you don't have to explicitly deref and copy the items?
Into means it will consume the value (you don't have it anymore): https://doc.rust-lang.org/1.0.0/style/style/naming/conversio...
https://rust-lang.github.io/api-guidelines/naming.html#ad-ho...