In something like an std::vector the ::end() iterator will point to one past the last element. You can't dereference this iterator but you can compare it to another iterator. If you compare another iterator to end() you know you've reached the end of the container. In the case of containers that aren't arrays, such as a tree or linked list, what values do these end iterators have to compare other iterators with?