On the surface, it looks like both drain and into_iter provide similar iterators, namely over the values of the collection. However, they are different:
fn m
After using drain, the Vec
is empty but the storage previously allocated for its elements remains allocated. This means that you can insert new elements in the Vec
without having to allocate storage for them until you reach the Vec
's capacity.
Note that before you can use the Vec
again, you must drop all references to the Drain iterator. Drain
's implementation of Drop
will remove all elements that hadn't been removed from the Vec
yet, so the Vec
will be empty even if you didn't finish the iteration.