understanding iterators