Write a song playlist class in C++ called "PlayList" using object-oriented design principles. The playlist should support the following ADT.
bool insert(string songtitle);
bool remove(string songtitle);
size_t size() const;
string get_next();
string get_rand();
The implementation should be based on an array of strings to store the song titles. The capacity should be 1024 entries. Duplicate song titles are not allowed. The constructor has to initialize the playlist to an empty list. The insert method adds a new song title to the list and returns true, but only if the song does not already exist and the playlist is not full. If it already exists or the list is full, the method returns false and does not add a second copy. Similarly, remove deletes the song from the play list if it exists and returns true. If the song title is not in the play lists, remove returns false. The size method returns the number of (distinct) songs currently in the playlist. The get_next member function returns null if the list is empty. Otherwise, it returns one song after another in the order in which they were inserted, one per invocation. Once at the end of the list, it wraps around and returns the first song again. The get_rand method returns a random song from the list or null if the list is empty. Calls to get_rand affect what song a subsequent call to get_next will return.
You need to write two files, playlist.cpp and playlist.h. The header file needs to include a concise description of the postcondition of each method (the preconditions are always "true"). The implementation needs to be efficient. For example, insert cannot be slower than O(n) where n is the number of songs in the list. All needed member variables should be private. You should also write (but not submit) a driver to test your class. Make sure to test extreme cases, including empty and full lists.