Steven Schveighoffer wrote:
You're assuming an iterator does not know its bounds.
That's right. That's the usual design, which is based on the pointer
model. Pointers do not know their limits.
Maybe I should
call it something other than iterator. How about cursor?
Or range? <g>
There are definite reasons to use containers in ways that don't involve
std.algorithm, where something that has the easy ability to move back
and forth N times without weird subrange operations.
I'm thinking of a structure with either a pointer to the container for
bounds checking, or a range and pointer combined (where the invariant is
that the pointer is always within the range).
I'm not saying ranges are not great, i think they are a HUGE step
forward, but the statement "Iterators must be eliminated" may be too
harsh. Perhaps the unchecked iterator, yes (but you may want to allow
it in certain performance-critical code).
If you had an iterator that knew its beginning and end, then the whole
paradigm of:
for (iterator i = begin; i != end; i++)
doesn't make much sense because of the redundancy.