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
std::advance
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.