In this homework, you will write a templated class hierarchy for a simple container class hierarchy.
The class GTUContainer is an abstract class with the following pure virtual member functions.
Test whether container is empty
Return container size
Return maximum size
Insert element, throws exception std::bad_pafram if there is a problem with insersion
Clear all content
Return iterator to beginning
Return iterator to end
The class GTUSet
for a set class.
The class GTUVector
appropriately for a vector class. This class will also overload the  operator. You may write other
helper classes to make your work easier.
All classes will keep their data using dynamic memory techniques with shared_ptr STL pointers. Do
not use regular pointers or STL container classes.
The classes GTUIterator and GTUIteratorConst implement iterator operators such as *, ->,
++, –, =, and ==.
You will also implement the following global functions from the STL library which will accept
GTUIterator parameters instead of regular STL iterators
Write your driver program to test the all the classes and all of their functions. Do not forget to test the
global functions with all concrete classes.
• Use separate header and implementation files for each class.
• Use name spaces.
• Do not forget to test the thrown exceptions.