Motivation -- Approach 3: Separate Iterator
class List { ...
int Count();
Item Get(int pos);
void AddItem(Item i, int pos);
void RemoveItem(int pos);
Item& FindItem(char* pName); ... }
class Iterator { ...
Iterator(List* list);
void First();
void Next();
bool IsDone();
Item CurrentItem(); ... }