Depending on how you write it, iterators are much better at this since most iterator methods produce iterators with size hints.
If you use "take" for example, collect should do the right thing: https://doc.rust-lang.org/src/core/iter/adapters/take.rs.htm...