My own reasoning for it is that there is no random access and there is no way to know the bounds. But then why do we have std::advance
? [EDIT] And come to think of
You are right; the requirements for operator+/-
is that it be an O(1)
operation, which cannot be met by bidirectional iterators. std::advance
has no such speed requirement (but will use it when available, e.g., for random access iterators).
Note that boost has boost::next
and boost::prior
implementations for iterators; I'm not sure what their status is on standardization but if it's in boost it's solid.
The reason we have std::advance
is that it provides a way to advance an iterator using the most effiecient way supported by that iterator.
The rational for std::advance
is that it should be obvious that you really intended to use it, even if it is not O(1).
You don't need a std::deadvance
as you can use std::advance
with a negative distance (for bidirectional iterators).