Let's kickstart this blogpost by defining what an iterator actually is. According to wikipedia, an iterator is:
"an object which allows a programmer to traverse through all the elements of a collection, regardless of its specific implementation."
A collection can pretty much be anything. The most obvious sources would be arrays, but other than that, iterations can be done over database resultsets, strings, datetime intervals, directories, file content and XML listings, to name a few. The real benefit of using a standard iterator implementation, is that every implemented iterator does its job obeying a standard interface. Whether said collection is a database resultset or a directory structure; it can be iterated using the same method names. And that's neat, because it will save us developers a trip to the manual on many occasions (... yeah it does... just admit it... ).