Most implementations of STL (Standard Template Library) use pointers as the underlying representation of iterators. However, an iterator doesn’t have to be a pointer, and there’s a good reason for that. Consider a huge vector of scanned images stored on a 6-Gigabyte disk. A built-in pointer on most machines has only 32 bits, which wouldn’t be large enough to iterate through such a large vector. Instead, the implementer can use a 64-bit integer as the underlying iterator in this case.