An internal iterator is implemented with member functions of the class that has items to step through.
An external iterator is implemented as a separate class that can be bound to the object that has items to step through. The basic advantage of an External iterator is that it’s easy to implement as it is implemented as a separate class.
Secondly, as it’s a different class, many iterator objects can be active simultaneously.