It's a good start, but a few comments:
1. No need for the virtual destructor. It won't be a base class.
2. You're holding pointers to dynamically allocated arrays, but you're doing a scalar delete.
3. The iterator shouldn't be part of the collection as you can only traverse it by one thing at a time.