The problem is that while in most cases, separating getting the
element referred to by the iterator (or the front of the range) separately from iterating is more efficient than having the iterator return an element when
you iterate it

Yes, but iterators don't need that separation at all. AFAIK,
that's how iterators work in Java and C++. In C# it's MoveNext()
and Current, but MoveNext() also checks for emptiness.

Reply via email to