An external iterator may be thought of as a type of pointer that has two primary operations: referencing one particular element in the object collection (called "element access"), and modifying itself so it points to the next element (called "element traversal"). There must also be a way to create an iterator so it points to some first element as well as some way to determine when the iterator has exhausted all of the elements in the container. Depending on the language and intended use, iterators may also provide additional operations or exhibit different behaviors.