Input iterators, Output iterator, Forward iterator, Random access iterators and Bidirectional iterators. Can someone please explain the differences ?