{"id":33,"date":"2024-08-01T18:35:48","date_gmt":"2024-08-01T18:35:48","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalC%2B%2BProgramming\/?page_id=33"},"modified":"2025-01-20T20:43:53","modified_gmt":"2025-01-20T20:43:53","slug":"assignment-4","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/assignments\/assignment-4\/","title":{"rendered":"Assignment 4"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Linked_Lists\"><\/span>Linked Lists<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_a_Linked_List\"><\/span><em>What is a Linked List?<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Linked lists are among the most useful data structures in Computer Science, and are therefore very heavily used in lots of different applications. For this assignment, we will concentrate on the&nbsp;<em>doubly-linked list<\/em>, which is perhaps the most useful of all linked lists. Here&#8217;s what a doubly-linked list looks like:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"98\" src=\"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/wp-content\/uploads\/2024\/10\/linkedlist.gif\" alt=\"\" class=\"wp-image-1601\"\/><\/figure>\n\n\n\n<p>As you can see, the linked list consists of a number of&nbsp;<em>list items<\/em>&nbsp;linked together in both the forward direction and the reverse direction. The links are typically pointers, and that is what we will use to implement this kind of list.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_are_Linked_Lists_so_Useful\"><\/span><em>Why are Linked Lists so Useful?<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Linked lists are useful because they are very flexible. You can use a linked list as a&nbsp;<em>collection<\/em>&nbsp;mechanism; that is, the linked list can collect together items which have something in common with each other. For example, perhaps you wish to collect together all the people who work in your office. Or all the people who work for a particular boss.<\/p>\n\n\n\n<p>Sometimes the order of items in a list is important, and sometimes it isn&#8217;t. It all depends on what your needs might be. Perhaps you don&#8217;t care about the order at all, in which case you could treat the items in a list as a&nbsp;<em>set<\/em>&nbsp;of items (in the Mathematical sense), or a&nbsp;<em>multi-set<\/em>&nbsp;of items (where the value of an item can be duplicated within the list).<\/p>\n\n\n\n<p>Alternatively, you might wish to maintain the items in the list in a particular order &#8212; perhaps alphabetically, or by employee number, or by salary.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Linked_List_Operations\"><\/span><em>Linked List Operations<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>There are obviously a number of useful operations that a linked list should support. For example:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Adding an item to a list<\/li>\n\n\n\n<li>Removing an item from a list<\/li>\n\n\n\n<li>Determining whether an item is currently in the list or not.<\/li>\n\n\n\n<li>Determining how many items are currently in the list<\/li>\n\n\n\n<li>Navigating through the list in order to access the items in a list<\/li>\n<\/ol>\n\n\n\n<p>Depending on how you are using the list, you may need only the ability to add or remove an item at the end of a list, or at the front of a list, or to add or remove an item anywhere in the list. Similarly, you may need only to navigate the list from the start to the end, or you may need to move both in the forward direction or in the reverse direction. You may wish to start at the beginning of the list, at its end, or anywhere in between.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Doubly-Linked_Lists\"><\/span><em>Doubly-Linked Lists<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>The doubly-linked list is very flexible in its ability to support the above features. Doubly-linked lists allow you to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Add an item anywhere in the list<\/li>\n\n\n\n<li>Remove an item from anywhere in the list<\/li>\n\n\n\n<li>Navigate in any direction, from any starting point in the list<\/li>\n<\/ol>\n\n\n\n<p>The doubly-linked list supports these features by using two pointers in each list item:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A&nbsp;<em>next<\/em>&nbsp;pointer<\/li>\n\n\n\n<li>A&nbsp;<em>previous<\/em>&nbsp;pointer<\/li>\n<\/ol>\n\n\n\n<p>In addition, it is very useful to add one more pointer in each list item:<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>A&nbsp;<em>list<\/em>&nbsp;pointer &#8212; a pointer to the list in which the list item currently resides<\/li>\n<\/ol>\n\n\n\n<p>The&nbsp;<em>next<\/em>&nbsp;pointer, as its name suggests, points to the next list item in the list. The&nbsp;<em>previous<\/em>&nbsp;pointer similarly points to the previous list item in the list. If a list item is the first one in the list, then its&nbsp;<em>previous<\/em>&nbsp;pointer is NULL. If a list item is the last one in the list, then its&nbsp;<em>next<\/em>&nbsp;pointer is NULL. In this way, we can navigate through the list and have a way of ensuring that we don&#8217;t &#8220;fall off&#8221; at either end of the list.<\/p>\n\n\n\n<p>The&nbsp;<em>list<\/em>&nbsp;pointer serves two purposes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A flag indicating whether the list item is currently in a list (we assume that a list item is either in a single list, or it is in no list). If the list item is not currently in a list, then its&nbsp;<em>list<\/em>&nbsp;pointer is NULL. If the list item is currently in a list, then the list pointer points to the owning list.<\/li>\n\n\n\n<li>If the list item is in a list, then the list pointer provides convenient access to the owning list&#8217;s context, which the list item code will need for its purposes.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Class_Design\"><\/span><em>Class Design<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>To implement such a doubly-linked list, we will be implementing three classes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A&nbsp;<strong>List<\/strong>&nbsp;class, each instance of which represents a doubly-linked list<\/li>\n\n\n\n<li>A&nbsp;<strong>ListItem<\/strong>&nbsp;class, each instance of which represents an item that can exist in a&nbsp;<strong>List<\/strong><\/li>\n\n\n\n<li>A&nbsp;<strong>ListIterator<\/strong>&nbsp;class, which encapsulates the necessary context to allow multiple concurrent iterations (navigations) through a&nbsp;<strong>List<\/strong><\/li>\n<\/ul>\n\n\n\n<p>What must each class provide to support the necessary features? <\/p>\n\n\n\n<p>Well, let&#8217;s cut to the chase, and give you some code to start with:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  List.h\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#ifndef List_h\n#define List_h\n\n#include &lt;string&gt;\nusing namespace std;\n\n\/\/ Forward references\n\nclass ListItem;\n\n\/\/ Class List\n\nclass List\n{\n  friend class ListItem;\n\npublic:\n  List();   \/\/ Constructor\n  ~List();  \/\/ Destructor\n\n  \/\/ Access\n  ListItem *GetFirst() const; \/\/ Returns ptr to first item in list\n  ListItem *GetLast() const;  \/\/ Returns ptr to last item in list\n  int GetCount() const;       \/\/ Returns count of items in list\n\n  \/\/ Operations\n  void Append(ListItem &amp;item); \/\/ Appends an item to the end of the list\n  void Purge();                \/\/ Removes all items from the list\n\n  \/\/ Debugging member functions\n  void Dump(const string prefix = &quot;&quot;) const;\n                              \/\/ Dump contents of list\n                              \/\/ (prefix is a string that prefixes\n                              \/\/  each line of the dumped output)\n\nprivate:\n  \/\/ Disable copy constructor for List\n  List(const List &amp;);\n  \/\/ Disable assignment for List\n  List &amp;operator=(const List &amp;);\n\n  \/\/ Data members\n  ListItem *m_first;    \/\/ Pointer to the first list item\n  ListItem *m_last;    \/\/ Pointer to the last list item\n  int m_count;         \/\/ Count of list items currently in list\n};\n\n\/\/ Class ListItem\n\nclass ListItem\n{\npublic:\n  ListItem(void *data);    \/\/ Constructor (associates with data)\n  ~ListItem();            \/\/ Destructor\n\n  \/\/ Operations\n  void Add(List &amp;list, ListItem *prevItem);\n                          \/\/ Add this ListItem to the specified list\n                          \/\/ following the specified prevItem\n                          \/\/ (if prevItem is NULL, place at front of list)\n\n  void Remove();            \/\/ Remove this list item from the list it is in\n\n  \/\/ Access member functions\n  ListItem *GetNext() const;     \/\/ Return ptr to next item in list\n  ListItem *GetPrevious() const; \/\/ Return ptr to previous item in list\n  const List *GetList() const;   \/\/ Return ptr to the list item's list\n  void *GetData();               \/\/ Returns ptr to data for item\n\n  \/\/ Debugging member functions\n  void Dump(const string prefix = &quot;&quot;) const;\n                              \/\/ Dump contents of list item\n                              \/\/ (prefix is a string that prefixes\n                              \/\/  each line of the dumped output)\nprivate:\n  \/\/ Disable copy constructor for ListItem\n  ListItem(const ListItem &amp;);\n  \/\/ Disable assignment for ListItem\n  ListItem &amp;operator=(const ListItem &amp;);\n\n  \/\/ Data members\n  ListItem  *m_next;    \/\/ Pointer to next item in the list\n  ListItem  *m_prev;    \/\/ Pointer to previous item in the list\n  List      *m_list;    \/\/ Pointer to the list the item currently is in\n  void      *m_data;    \/\/ Pointer to data\n};\n\n\/\/ Class ListIterator\n\nclass ListIterator\n{\npublic:\n  ListIterator(const List &amp;list);  \/\/ Constructor\n  ~ListIterator();           \/\/ Destructor\n\n  \/\/ Access\n  const List *GetList() const; \/\/ Return ptr to the iterator's list\n  ListItem *GetCurrent() const;\/\/ Return ptr to current list item\n  ListItem *GetNext();         \/\/ Move to next item and return ptr to it\n  ListItem *GetPrevious();     \/\/ Move to previous item and return ptr to it\n  bool  AtFirst() const;       \/\/ return true if current item is first item\n  bool  AtLast() const;        \/\/ return true if current item is last item\n\nprivate:\n  \/\/ Disable copy constructor for ListIterator\n  ListIterator(const ListIterator &amp;);\n  \/\/ Disable assignment for ListIterator\n  ListIterator &amp;operator=(const ListIterator &amp;);\n\n  \/\/ Data\n  const List *m_list;       \/\/ The list we are iterating through\n  ListItem   *m_current;    \/\/ Points to the current item in the list\n};\n\n#endif \/* List_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  List.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> List_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> List_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Forward references<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Class List<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">friend<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">List<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">   \/\/ Constructor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~List<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">  \/\/ Destructor<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetFirst<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\"> \/\/ Returns ptr to first item in list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetLast<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ Returns ptr to last item in list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">GetCount<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">       \/\/ Returns count of items in list<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Operations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\"> \/\/ Appends an item to the end of the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Purge<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">                \/\/ Removes all items from the list<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Debugging member functions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">prefix<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #A31515\">&quot;&quot;<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/ Dump contents of list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/ (prefix is a string that prefixes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/  each line of the dumped output)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable copy constructor for List<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">List<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable assignment for List<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Data members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem *m_first;<\/span><span style=\"color: #008000\">    \/\/ Pointer to the first list item<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem *m_last;<\/span><span style=\"color: #008000\">    \/\/ Pointer to the last list item<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> m_count;<\/span><span style=\"color: #008000\">         \/\/ Count of list items currently in list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Class ListItem<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListItem<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #001080\">data<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">    \/\/ Constructor (associates with data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~ListItem<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">            \/\/ Destructor<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Operations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #001080\">prevItem<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                          \/\/ Add this ListItem to the specified list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                          \/\/ following the specified prevItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                          \/\/ (if prevItem is NULL, place at front of list)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">            \/\/ Remove this list item from the list it is in<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Access member functions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">     \/\/ Return ptr to next item in list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\"> \/\/ Return ptr to previous item in list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">   \/\/ Return ptr to the list item&#39;s list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">               \/\/ Returns ptr to data for item<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Debugging member functions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">prefix<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #A31515\">&quot;&quot;<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/ Dump contents of list item<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/ (prefix is a string that prefixes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">                              \/\/  each line of the dumped output)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable copy constructor for ListItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListItem<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable assignment for ListItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Data members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem  *m_next;<\/span><span style=\"color: #008000\">    \/\/ Pointer to next item in the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem  *m_prev;<\/span><span style=\"color: #008000\">    \/\/ Pointer to previous item in the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List      *m_list;<\/span><span style=\"color: #008000\">    \/\/ Pointer to the list the item currently is in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\">      *m_data;<\/span><span style=\"color: #008000\">    \/\/ Pointer to data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Class ListIterator<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListIterator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListIterator<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ Constructor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~ListIterator<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">           \/\/ Destructor<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\"> \/\/ Return ptr to the iterator&#39;s list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">\/\/ Return ptr to current list item<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">         \/\/ Move to next item and return ptr to it<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">();<\/span><span style=\"color: #008000\">     \/\/ Move to previous item and return ptr to it<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">bool<\/span><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">AtFirst<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">       \/\/ return true if current item is first item<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">bool<\/span><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">AtLast<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">        \/\/ return true if current item is last item<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable copy constructor for ListIterator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListIterator<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListIterator<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Disable assignment for ListIterator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">ListIterator<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListIterator<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> List *m_list;<\/span><span style=\"color: #008000\">       \/\/ The list we are iterating through<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem   *m_current;<\/span><span style=\"color: #008000\">    \/\/ Points to the current item in the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* List_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note<\/strong>: The above classes are incomplete, and show no implementation details. That&#8217;s your job!<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Warning<\/strong>: Do not change any of these class members, their signatures, or their access (public or private). Furthermore, do not add any other data members or member functions. These classes will be used and modified in specific ways in later assignments, and if you change them here, you will have difficulty following the instructions in the later assignments. <strong><em>BEWARE<\/em><\/strong>!<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_List_Class\"><\/span><em>The&nbsp;<\/em><code>List<\/code><em>&nbsp;Class<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>As you might guess, a doubly-linked list is represented by an instance of class&nbsp;<strong>List<\/strong>. Its primary purpose is to provide the necessary state of the list &#8212; specifically, to point at the first item in the list, and the last item in the list, so that we can start navigation at the appropriate places. It also keeps track of the number of items currently in the list.<\/p>\n\n\n\n<p>Aside from the obvious access methods, the List class supports two operations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>Append()<\/code><\/strong>&nbsp;&#8212; adds an item to the end of the&nbsp;<strong>List<\/strong><\/li>\n\n\n\n<li><strong><code>Purge()<\/code><\/strong>&nbsp;&#8212; removes all items from the&nbsp;<strong>List<\/strong>.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Hint<\/strong>: Where, in particular, would you think the&nbsp;<strong><code>Purge()<\/code><\/strong>&nbsp;operation would be useful within the&nbsp;List&nbsp;class?<\/p>\n<\/blockquote>\n\n\n\n<p>In addition, there is a&nbsp;<strong><code>Dump()<\/code><\/strong>&nbsp;member function, which is a convenient debugging tool.&nbsp; It prints out the contents of the list in internal form &#8212; that is, the hexadecimal values of the&nbsp;<strong><code>List<\/code><\/strong>&#8216;s private pointers, and also prints out the internal contents of each of the&nbsp;<strong><code>ListItem<\/code><\/strong>s in the&nbsp;<strong><code>List<\/code><\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_ListItem_Class\"><\/span><em>The&nbsp;<\/em><code>ListItem<\/code><em>&nbsp;Class<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Not surprisingly, an item in a doubly-linked list is represented by an instance of class&nbsp;<strong><code>ListItem<\/code><\/strong>. Its primary purpose is to hold the three pointers we talked about above, and to support the basic operations on a&nbsp;<strong><code>ListItem<\/code><\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>ListItem()<\/code><\/strong>&#8212; the constructor associates data with the list item. Since we don&#8217;t know what you might want to put in a list, this is a&nbsp;<strong><code>void *<\/code><\/strong>&nbsp;pointer, which must be cast appropriately, once you retrieve the data from a list item.<\/li>\n\n\n\n<li><strong><code>Add()<\/code><\/strong>&nbsp;&#8212; adds the item to a specified&nbsp;<strong>List<\/strong>, following the specified previous item.&nbsp;<em>[<strong>Hint<\/strong>: What should this do if the item is already in a&nbsp;<strong><code>List<\/code><\/strong>?]<\/em><\/li>\n\n\n\n<li><strong><code>Remove()<\/code><\/strong>&nbsp;&#8212; removes the item from the&nbsp;<strong><code>List<\/code><\/strong>&nbsp;it is in.&nbsp;<em>[<strong>Hint<\/strong>: What should this do if the item is not in any&nbsp;List&nbsp;?]<\/em><\/li>\n\n\n\n<li><strong><code>Data()<\/code><\/strong>&#8212; this returns a&nbsp;<strong><code>void *<\/code><\/strong>&nbsp;pointer to the data the list item represents. Typically, this must be typecast to the proper type before you can use the pointer to access the data structure.&nbsp; This implies that you must already know what is being held in the list item.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Hint<\/strong>: What should the&nbsp;<strong><code>ListItem<\/code><\/strong>&nbsp;destructor do?<em><strong> <\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<p>As before, there is a&nbsp;<strong><code>Dump()<\/code><\/strong>&nbsp;member function, which is a convenient debugging tool.&nbsp; It prints out the contents of the list item in internal form &#8212; that is, the hexadecimal values of the&nbsp;<strong><code>ListItem<\/code><\/strong>&#8216;s private pointers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_ListIterator_Class\"><\/span><em>The&nbsp;<\/em><code>ListIterator<\/code><em>&nbsp;Class<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Whenever you wish to navigate through a doubly-linked list, you need to maintain some context &#8212; where you are currently positioned within the list. We could have maintained that context within the&nbsp;<strong><code>List<\/code><\/strong>&nbsp;class itself, but that would mean that we could only have a single navigation active against a specific list at a time. That is often quite restrictive, so instead we invent a class,&nbsp;<strong><code>ListIterator<\/code><\/strong>, which serves to maintain the necessary context, and in general encapsulates the necessary support for iterating (navigating) through a specific list.<\/p>\n\n\n\n<p><strong><code>ListIterator<\/code><\/strong>&nbsp;supports the following operations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>ListIterator()<\/code><\/strong>&nbsp;&#8212; the constructor is responsible for associating the&nbsp;<strong><code>ListIterator<\/code><\/strong>&nbsp;with the specified&nbsp;<strong><code>List<\/code><\/strong>, and for setting its starting position at the first item in that&nbsp;<strong><code>List<\/code><\/strong>.<\/li>\n\n\n\n<li><strong><code>GetList()<\/code><\/strong>&nbsp;&#8212; Returns a pointer to the associated&nbsp;<strong><code>List<\/code><\/strong>.<\/li>\n\n\n\n<li><strong><code>GetNext()<\/code><\/strong>&nbsp;&#8212; Moves the current position to the next item in the&nbsp;<strong><code>List<\/code><\/strong>. If there is no next item, does not change the current position, and returns <code><strong>NULL<\/strong><\/code>.<\/li>\n\n\n\n<li><strong><code>GetPrevious()<\/code><\/strong>&nbsp;&#8212; Moves the current position to the previous item in the&nbsp;<strong><code>List<\/code><\/strong>. If there is no previous item, does not change the current position, and returns <strong><code>NULL<\/code><\/strong>.<\/li>\n\n\n\n<li><strong><code>AtFirst()<\/code><\/strong>&nbsp;&#8212; returns a Boolean value indicating whether the current position is at the first item in the&nbsp;<strong><code>List<\/code><\/strong><\/li>\n\n\n\n<li><strong><code>AtLast()<\/code><\/strong>&nbsp;&#8212; returns a Boolean value indicating whether the current position is at the last item in the&nbsp;<strong><code>List<\/code><\/strong>.<\/li>\n\n\n\n<li><strong><code>GetCurrent()<\/code><\/strong>&nbsp;&#8212; This is merely an access method, and returns a pointer to the current item for the&nbsp;<strong><code>ListIterator<\/code><\/strong>. There should always be a current item for a&nbsp;<strong><code>ListIterator<\/code><\/strong>&nbsp;(i.e. it should never become <code><strong>NULL<\/strong><\/code>, nor should it point at anything other than a list item that is in the&nbsp;<strong><code>List<\/code><\/strong>&nbsp;being navigated by the&nbsp;<strong><code>ListIterator<\/code><\/strong>.).&nbsp; There is only one exception to this: When the&nbsp;<strong><code>ListIterator<\/code><\/strong>&nbsp;is associated with a&nbsp;<strong><code>List<\/code>&nbsp;<\/strong>that is currently empty;&nbsp; only in that case may the&nbsp;<strong><code>GetCurrent()<\/code><\/strong>&nbsp;member function return a null pointer.&nbsp; (Note, however, that the&nbsp;<strong><code>ListIterator<\/code><\/strong>&nbsp;class should be able to handle the case where the association is made with an empty list, and subsequently the list has items added to it.&nbsp;<em><strong>See below<\/strong><\/em>.)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Assignment\"><\/span>The Assignment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Your task is to implement the three classes,&nbsp;<strong><code>List<\/code><\/strong>,&nbsp;<strong><code>ListItem<\/code><\/strong>&nbsp;and&nbsp;<strong><code>ListIterator<\/code><\/strong>.&nbsp;Place the class declarations all in a single file,&nbsp;list.h&nbsp;(as shown in the above code), and their implementations in a single file,&nbsp;list.cpp.<\/p>\n\n\n\n<p>Here are some hints you will need to pay attention to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Since these classes refer to each other, we need to use one or more&nbsp;<em>forward references<\/em>&nbsp;so that the classes will compile. Thus the need to specify the following line&nbsp;<em>before<\/em>&nbsp;the&nbsp;<strong>List<\/strong>&nbsp;class declaration:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class ListItem;<\/strong><\/code><\/pre>\n\n\n\n<p>This will forward declare the&nbsp;<strong>ListItem<\/strong>&nbsp;class so that the&nbsp;<strong>List<\/strong>&nbsp;class can refer to&nbsp;<strong>ListItem<\/strong>&nbsp;without the compiler complaining. Note that, since a forward declaration does not provide any information about a class other than its name, if you have code that refers to information about that class, such as its size or its members, your compiler will complain &#8212; sometimes with some very strange error messages!<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>These three classes work together as a&nbsp;<em>family of classes<\/em>&nbsp;to support a single piece of functionality. It is necessary to declare appropriate&nbsp;friendship relationships among the classes. I have already included the necessary friendship declarations;&nbsp; try to keep these to a minimum &#8212; do&nbsp;<em><strong>not<\/strong><\/em>&nbsp;make every class a friend of every other class.&nbsp; In fact, you do not need to make any additions of this kind for this assignment.<\/li>\n\n\n\n<li>Since all of these classes contain data members which are pointers, we have disabled their copy constructors and assignment operators, by placing the declarations of those methods in the class&#8217;s private section.&nbsp; You do not need to implement these member functions.<\/li>\n<\/ul>\n\n\n\n<p>Start by placing all your implementation code in the&nbsp;<strong><code>list.cpp<\/code><\/strong>&nbsp;file, and don&#8217;t worry about run-time efficiency. It&#8217;s much better to get the code working first, and then worry about how to make it fast &#8212; not the other way around. Later, if you have time, you can consider making the appropriate modifications to speed up the code &#8212; mostly making essential member functions&nbsp;<strong>inline<\/strong>.<\/p>\n\n\n\n<p>To give you a starting point, here is a start at the&nbsp;<code><strong>list.cpp<\/strong><\/code>&nbsp;file, with the&nbsp;<code><strong>Dump()<\/strong><\/code>&nbsp;member functions coded for you:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  List.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &lt;cassert&gt;  \/\/ For assert() -- use encouraged!\nusing namespace std;\n\n#include &quot;list.h&quot;\n\n\/\/ List\n\nvoid List::Dump(const string prefix) const\n{\n  \/\/ Print List information\n  cout &lt;&lt; prefix &lt;&lt; &quot;List at: &quot; &lt;&lt; this &lt;&lt; endl\n       &lt;&lt; prefix &lt;&lt; &quot; Count:  &quot; &lt;&lt; GetCount() &lt;&lt; endl\n       &lt;&lt; prefix &lt;&lt; &quot; First:  &quot; &lt;&lt; GetFirst() &lt;&lt; endl\n       &lt;&lt; prefix &lt;&lt; &quot; Last:   &quot; &lt;&lt; GetLast() &lt;&lt; endl;\n\n  \/\/ Print all the ListItems\n  for (ListItem *item = GetFirst();\n       item != 0;\n       item = item-&gt;GetNext()\n      )\n  {\n      item-&gt;Dump(prefix + &quot;  &quot;);\n  }\n}\n\n\/\/ ListItem\n\nvoid ListItem::Dump(const string prefix) const\n{\n  cout &lt;&lt; prefix &lt;&lt; &quot; ListItem: &quot; &lt;&lt; this &lt;&lt; endl\n       &lt;&lt; prefix &lt;&lt; &quot;   Next:  &quot; &lt;&lt; GetNext() &lt;&lt; endl\n       &lt;&lt; prefix &lt;&lt; &quot;   Prev:  &quot; &lt;&lt; GetPrevious() &lt;&lt; endl;\n}\n\n\/\/ ListIterator\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  List.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;cassert&gt;<\/span><span style=\"color: #0000FF\">  <\/span><span style=\"color: #008000\">\/\/ For assert() -- use encouraged!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;list.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ List<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">prefix<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Print List information<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;List at: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; endl<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Count:  &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #795E26\">GetCount<\/span><span style=\"color: #000000\">() &lt;&lt; endl<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; First:  &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #795E26\">GetFirst<\/span><span style=\"color: #000000\">() &lt;&lt; endl<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Last:   &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #795E26\">GetLast<\/span><span style=\"color: #000000\">() &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Print all the ListItems<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (ListItem *item = <\/span><span style=\"color: #795E26\">GetFirst<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">(prefix + <\/span><span style=\"color: #A31515\">&quot;  &quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ ListItem<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ListItem<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">prefix<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; ListItem: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\"> &lt;&lt; endl<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;   Next:  &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() &lt;&lt; endl<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; prefix &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;   Prev:  &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ ListIterator<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Of course, there&#8217;s lots else for you to fill in in this file!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Hints:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remember to use initializer lists whenever possible<\/li>\n\n\n\n<li>Try to avoid duplicating code as much as possible.&nbsp; For example, there should be one, and only one, place where you provide code to add an element to a list; there should be one, and only one, place where you provide code to remove an element from a list.<\/li>\n\n\n\n<li>Think about your&nbsp;<strong>List::Append<\/strong>&nbsp;member function: How should you implement it with the least amount of effort?&nbsp;<br><strong><em>[Hint: My version of this function has a body consisting of a single statement.]<\/em><\/strong><\/li>\n\n\n\n<li>Think about how to code using as simple algorithms as possible (but not too simple!).&nbsp; For example, my code for the&nbsp;<strong>List::Purge<\/strong>&nbsp;member function contains of four lines of code within the body of the function &#8212; and two of those lines each consists of a single curly brace.<\/li>\n\n\n\n<li>Use the&nbsp;<strong>Dump<\/strong>&nbsp;member functions during your debugging &#8212; there&#8217;s a reason why I provided them for you to use!<\/li>\n\n\n\n<li>When you come to write the code for adding an item to a list, remember that there are basically three cases:<ul><li>When the item is to be inserted at the start of the list<\/li><li>When the item is to be inserted at the end of the list<\/li><li>When the item is to be inserted somewhere in the middle of the list.<\/li><\/ul>and remember that adding an item to an empty list is a special case of&nbsp;<em>both of the first and second cases<\/em>.&nbsp;&nbsp; Try to ensure that you have all the necessary cases covered, and that the various data members which are pointers to various items in the list are all properly updated in all of the cases.&nbsp; It&#8217;s easy to forget one or two!&nbsp; Try to develop consistent practices.&nbsp; It&#8217;s often helpful to draw yourself a diagram of all the links, before, during, and after an item is added to a list.<\/li>\n\n\n\n<li>Similar thinking applies to when you come to write the code to remove an item from a list.<\/li>\n\n\n\n<li>It may appear at first glance that the&nbsp;<strong>ListIterator::GetCurrent()<\/strong>&nbsp;member function is trivial to implement.&nbsp; It would be, if it were not for the following situation that I wish this iterator to handle:<ul><li>The iterator is created to be associated with a list that is empty.<\/li><li>Subsequently, items are added and removed from the list<\/li><li>The iterator is then used to iterate over the items in the list, based on the items that are actually in the list at that time.<\/li><\/ul>[Hint: What if the list was not empty when the iterator is created, but subsequently items are added to the beginning of the list before the iterator is used?&nbsp;&nbsp; What should the iterator do then?]<br>This means that the code for&nbsp;<strong>GetCurrent<\/strong>&nbsp;is not quite as simple as you might think.&nbsp; In particular, while&nbsp;<strong>GetCurrent<\/strong>&nbsp;is conceptually const, because it must handle the above case, you will have to code it in such a way that it is&nbsp;<em>not<\/em>&nbsp;const.&nbsp; See the slides on the web site for how to do this.<\/li>\n\n\n\n<li>One more thing about&nbsp;<strong>GetCurrent<\/strong>:&nbsp; It should only return with a NULL pointer under one condition:&nbsp;&nbsp;<em>if its associated list is currently empty<\/em>.&nbsp; Under all other circumstances, it should return a valid pointer to the list item that is currently located at within its associated list.&nbsp; In particular, attempting to move from the last item in the list to the (non-existent) next item, or attempting to move from the first item in the list to the (non-existent) previous item, should not affect the value of the current pointer at all.<\/li>\n<\/ul>\n<\/blockquote>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testing_Your_Implementation\"><\/span>Testing Your Implementation<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>I&#8217;ve discovered that some of my students seem to struggle to create a thorough test for their implementation.&nbsp; So, to provide a (hopefully) good example of how to test, and to provide you with some guidance on what constitutes correct operation, here is a test program that tests just the basic <strong><code>List<\/code><\/strong>\/<strong><code>ListItem<\/code><\/strong>\/<strong><code>ListIterator<\/code><\/strong> class operations:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  TestList.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\nusing namespace std;\n\n#include &quot;List.h&quot;\n\n\/*\n * Tests a ListIterator, by iterating forward through the list,\n * then backward, then forward again.\n *\/\nvoid testIterator(ListIterator &amp;iter)\n{\n  cout &lt;&lt; &quot;The list contains &quot; &lt;&lt; iter.GetList()-&gt;GetCount()\n                               &lt;&lt; &quot; items&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot;The iterator is at the start of the list: &quot;\n                               &lt;&lt; boolalpha &lt;&lt; iter.AtFirst() &lt;&lt; endl;\n\n  ListItem *item = 0;\n  cout &lt;&lt; &quot;Iterating forward...&quot; &lt;&lt; endl;\n  for ( item = iter.GetCurrent(); item != 0; item = iter.GetNext() )\n  {\n    double *d = (double *) item-&gt;GetData();\n    cout &lt;&lt; *d &lt;&lt; endl;\n  }\n\n  cout &lt;&lt; &quot;The iterator is at the end of the list: &quot;\n       &lt;&lt; boolalpha &lt;&lt; iter.AtLast() &lt;&lt; endl;\n  cout &lt;&lt; &quot;Iterating backward...&quot; &lt;&lt; endl;\n  for ( item = iter.GetCurrent(); item != 0; item = iter.GetPrevious() )\n  {\n    double *d = (double *) item-&gt;GetData();\n    cout &lt;&lt; *d &lt;&lt; endl;\n  }\n\n  cout &lt;&lt; &quot;The iterator is at the start of the list: &quot;\n       &lt;&lt; boolalpha &lt;&lt; iter.AtFirst() &lt;&lt; endl;\n  cout &lt;&lt; &quot;Iterating forward again...&quot; &lt;&lt; endl;\n  for ( item = iter.GetCurrent(); item != 0; item = iter.GetNext() )\n  {\n    double *d = (double *) item-&gt;GetData();\n    cout &lt;&lt; *d &lt;&lt; endl;\n  }\n}\n\n\/*\n * Main entry point to do a fairly complete test of the basic\n * List\/ListItem\/ListIterator classes.\n *\/\nint main(int argc, const char * argv[])\n{\n  List list;\n  ListIterator iter1(list);\n\n  cout &lt;&lt; &quot;---Testing iteration through an empty list---&quot; &lt;&lt; endl;\n  testIterator(iter1);\n\n  cout &lt;&lt; &quot;---Initial list---&quot; &lt;&lt; endl;\n  list.Dump();\n\n  double d1 = 1.0, d2 = 2.0, d3 = 3.0, d4 = 4.0;\n\n  ListItem item1(&amp;d1);\n  cout &lt;&lt; &quot;---Appending list item---&quot; &lt;&lt; endl;\n  list.Append(item1);\n  list.Dump();\n\n  ListItem item2(&amp;d2);\n  cout &lt;&lt; &quot;---Adding list item to front of list---&quot; &lt;&lt; endl;\n  item2.Add(list, 0);\n  list.Dump();\n\n  ListItem item3(&amp;d3);\n  cout &lt;&lt; &quot;---Inserting list item in the middle of list---&quot; &lt;&lt; endl;\n  item3.Add(list, &amp;item2);\n  list.Dump();\n\n  ListItem item4(&amp;d4);\n  cout &lt;&lt; &quot;---Adding list item to the end of list---&quot; &lt;&lt; endl;\n  item4.Add(list, &amp;item1);\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Testing iterator initialized against full list---&quot; &lt;&lt; endl;\n\n  ListIterator iter2(list);\n  testIterator(iter2);\n\n  cout &lt;&lt; &quot;---Testing iterator initialized against empty list---&quot; &lt;&lt; endl;\n  testIterator(iter1);\n\n  cout &lt;&lt; &quot;---Testing removal of item from end of list---&quot; &lt;&lt; endl;\n  item4.Remove();\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Testing removal of item from middle of list---&quot; &lt;&lt; endl;\n  item3.Remove();\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Testing removal of item from front of list---&quot; &lt;&lt; endl;\n  item2.Remove();\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Testing removal of item alone in list---&quot; &lt;&lt; endl;\n  item1.Remove();\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Adding items back to list---&quot; &lt;&lt; endl;\n  list.Append(item1);\n  list.Append(item2);\n  list.Append(item3);\n  list.Append(item4);\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Testing purge---&quot; &lt;&lt; endl;\n  list.Purge();\n  list.Dump();\n\n  cout &lt;&lt; &quot;---Ending main function---&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot;***You should be testing the List destructor***&quot; &lt;&lt; endl;\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  TestList.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;List.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> * Tests a ListIterator, by iterating forward through the list,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> * then backward, then forward again.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">testIterator<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">ListIterator<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;The list contains &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">()-&gt;<\/span><span style=\"color: #795E26\">GetCount<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                               &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; items&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;The iterator is at the start of the list: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                               &lt;&lt; boolalpha &lt;&lt; <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">AtFirst<\/span><span style=\"color: #000000\">() &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem *item = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Iterating forward...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> ( item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">(); item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *d = (<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *) <\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    cout &lt;&lt; *d &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;The iterator is at the end of the list: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; boolalpha &lt;&lt; <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">AtLast<\/span><span style=\"color: #000000\">() &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Iterating backward...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> ( item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">(); item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *d = (<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *) <\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    cout &lt;&lt; *d &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;The iterator is at the start of the list: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       &lt;&lt; boolalpha &lt;&lt; <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">AtFirst<\/span><span style=\"color: #000000\">() &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Iterating forward again...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> ( item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">(); item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *d = (<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> *) <\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    cout &lt;&lt; *d &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> * Main entry point to do a fairly complete test of the basic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> * List\/ListItem\/ListIterator classes.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List list;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter1<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing iteration through an empty list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">testIterator<\/span><span style=\"color: #000000\">(iter1);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Initial list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> d1 = <\/span><span style=\"color: #098658\">1.0<\/span><span style=\"color: #000000\">, d2 = <\/span><span style=\"color: #098658\">2.0<\/span><span style=\"color: #000000\">, d3 = <\/span><span style=\"color: #098658\">3.0<\/span><span style=\"color: #000000\">, d4 = <\/span><span style=\"color: #098658\">4.0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem <\/span><span style=\"color: #795E26\">item1<\/span><span style=\"color: #000000\">(&amp;d1);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Appending list item---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(item1);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem <\/span><span style=\"color: #795E26\">item2<\/span><span style=\"color: #000000\">(&amp;d2);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Adding list item to front of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem <\/span><span style=\"color: #795E26\">item3<\/span><span style=\"color: #000000\">(&amp;d3);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Inserting list item in the middle of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item3<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, &amp;item2);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem <\/span><span style=\"color: #795E26\">item4<\/span><span style=\"color: #000000\">(&amp;d4);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Adding list item to the end of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item4<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, &amp;item1);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing iterator initialized against full list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter2<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">testIterator<\/span><span style=\"color: #000000\">(iter2);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing iterator initialized against empty list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">testIterator<\/span><span style=\"color: #000000\">(iter1);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing removal of item from end of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item4<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing removal of item from middle of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item3<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing removal of item from front of list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item2<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing removal of item alone in list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">item1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Adding items back to list---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(item1);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(item2);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(item3);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(item4);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Testing purge---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Purge<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---Ending main function---&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;***You should be testing the List destructor***&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\"><\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Using_Your_Implementation\"><\/span><em>Using Your Implementation<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Wines\"><\/span>Wines<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<p>To give you an idea how you might use these classes in a real situation, here&#8217;s an example.<\/p>\n\n\n\n<p>Naturally, when I thought of lists, the first thing that came into my mind was a wine list!&nbsp; <\/p>\n\n\n\n<p>So here&#8217;s a very simple <strong><code>Wine<\/code><\/strong> class, some of which you will be filling in.&nbsp; Then there is a test program to give our list implementation a reasonable degree of testing in a wine list situation.column<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Wine.h\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#ifndef Wine_h\n#define Wine_h\n\n#include &lt;string&gt;\nusing namespace std;\n\nclass Wine\n{\npublic:\n  Wine(const string &amp;name, int year);\n  Wine(const Wine &amp;wine);\n  ~Wine();\n\n  const string &amp;Name() const\n  {\n    return m_name;\n  }\n\n  int Year() const\n  {\n    return m_year;\n  }\n\n  \/\/ Assignment operator\n  Wine &amp;operator=(const Wine &amp;wine);\n\n  void Print() const;\n\nprivate:\n  \/\/ Data members\n  string m_name;\n  int    m_year;\n};\n\n#endif \/* Wine_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Wine.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Wine_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Wine_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Wine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Wine<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">name<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">year<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Wine<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Wine<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Wine<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #795E26\">Name<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Year<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_year;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Assignment operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Wine<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Wine<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Data members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  string m_name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">    m_year;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Wine_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Wine.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\nusing namespace std;\n\n#include &quot;Wine.h&quot;\n\nWine::Wine(const string &amp;name, int year)\n    : m_name(name), m_year(year)\n{}\n\nvoid Wine::Print() const\n{\n    cout &lt;&lt; &quot;Wine: &quot; &lt;&lt; m_name &lt;&lt; &quot;, &quot; &lt;&lt; m_year &lt;&lt; endl;\n}\n\n\/\/ You implement the remaining member functions of the Wine class\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Wine.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Wine.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Wine<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Wine<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> string &amp;name, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> year)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    : <\/span><span style=\"color: #795E26\">m_name<\/span><span style=\"color: #000000\">(name), <\/span><span style=\"color: #795E26\">m_year<\/span><span style=\"color: #000000\">(year)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Wine<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Wine: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_name &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;, &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_year &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ You implement the remaining member functions of the Wine class<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Here&#8217;s a test program for this&#8230;<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  TestWine.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\nusing namespace std;\n\n#include &quot;List.h&quot;\n#include &quot;Wine.h&quot;\n\nstatic void display(List &amp;list)\n{\n  cout &lt;&lt; &quot;Contents of list:&quot; &lt;&lt; endl;\n  ListIterator iter(list);\n  for (ListItem *item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext()\n      )\n  {\n    Wine *wine = (Wine *)(item-&gt;GetData());\n    wine-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;-----Dump------&quot; &lt;&lt; endl;\n  list.Dump();\n  cout &lt;&lt; &quot;---End Dump----&quot; &lt;&lt; endl;\n}\n\nstatic void ListWines()\n{\n  Wine beaujolais(&quot;Beaujolais&quot;, 1970);\n  Wine amontillado(&quot;Amontillado&quot;, 1964);\n  Wine riesling(&quot;Riesling&quot;, 1980);\n  Wine gewurztraminer(&quot;Gewurztraminer&quot;, 1993);\n  Wine shiraz(&quot;Shiraz&quot;, 2003);\n  Wine cabernet(&quot;Cabernet Sauvignon&quot;, 2001);\n\n  \/\/ Each item in the following list is an instance\n  \/\/ of ListItem, each pointing to its corresponding\n  \/\/ Wine instance.\n  ListItem items[] = { &amp;beaujolais, &amp;amontillado,\n                       &amp;riesling,   &amp;gewurztraminer,\n                       &amp;shiraz,     &amp;cabernet };\n\n  ListItem *item; \/\/ Item pointer used in several places\n  Wine *wine;     \/\/ Wine pointer used in many places\n\n  List list;      \/\/ The list of wines\n\n  \/\/ The following List iterator is positioned so that\n  \/\/ the list it associates with is empty at the time\n  \/\/ of the association.\n  ListIterator iter(list);\n\n  \/\/ Start testing\n\n  cout &lt;&lt; &quot;Empty list...&quot; &lt;&lt; endl;\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Append&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Appending: &quot;;\n  wine = (Wine *)(items[0].GetData());\n  wine-&gt;Print();\n  list.Append(items[0]);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing a second Append&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Appending: &quot;;\n  wine = (Wine *)(items[4].GetData());\n  wine-&gt;Print();\n  list.Append(items[4]);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to front&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  wine = (Wine *)(items[1].GetData());\n  wine-&gt;Print();\n  items[1].Add(list, 0);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  wine = (Wine *)(items[2].GetData());\n  wine-&gt;Print();\n  items[2].Add(list, list.GetLast());\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to middle&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  wine = (Wine *)(items[3].GetData());\n  wine-&gt;Print();\n  items[3].Add(list, &amp;items[1]);\n  display(list);\n\n  cout &lt;&lt; &quot;------------Iterator testing------------&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot;Testing iterator originally set on empty list...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext()\n      )\n  {\n    Wine *wine = (Wine *)(item-&gt;GetData());\n    wine-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;Now reversing direction on iterator...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetPrevious()\n      )\n  {\n    Wine *wine = (Wine *)item-&gt;GetData();\n    wine-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;Reversing direction again...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext()\n      )\n  {\n    Wine *wine = (Wine *)item-&gt;GetData();\n    wine-&gt;Print();\n  }\n  cout &lt;&lt; &quot;--------End Iterator testing------------&quot; &lt;&lt; endl;\n\n  cout &lt;&lt; &quot;Testing removal from middle&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  wine = (Wine *)(items[3].GetData());\n  wine-&gt;Print();\n  items[3].Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  wine = (Wine *)(items[2].GetData());\n  wine-&gt;Print();\n  items[2].Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from front&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  wine = (Wine *)(items[1].GetData());\n  wine-&gt;Print();\n  items[1].Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  wine = (Wine *)(items[4].GetData());\n  wine-&gt;Print();\n  items[4].Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal of last item&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  wine = (Wine *)(items[0].GetData());\n  wine-&gt;Print();\n  items[0].Remove();\n  display(list);\n\n  \/\/ Finally, we test the actions of the List destructor\n\n  \/\/ First, go through the items to check that they are not in\n  \/\/ a list...\n  cout &lt;&lt; &quot;Checking that removed items do not appear to be in a list&quot; &lt;&lt; endl;\n  int len = sizeof(items)\/sizeof(items[0]);\n  int elem;\n  int errors = 0;\n  for (elem = 0; elem &lt; len; elem++)\n  {\n    if (items[elem].GetList() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still in a list&quot; &lt;&lt; endl;\n  }\n    if (items[elem].GetNext() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a next ptr&quot; &lt;&lt; endl;\n  }\n    if (items[elem].GetPrevious() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a previous ptr&quot; &lt;&lt; endl;\n    }\n  }\n  \n  \/\/ Now, create the list and populate it from the items\n  cout &lt;&lt; &quot;Checking addition and removal to a dynamic list&quot; &lt;&lt; endl;\n  List *dynList = new List();\n  for (elem = len-1; elem &gt;= 0; elem--)\n  {\n    dynList-&gt;Append(items[elem]);\n  }\n  \n  \/\/ Display the list for validation\n  display(*dynList);\n\n  \/\/ Now destroy the list and examine the state of each\n  \/\/ of the items that were in the list\n  cout &lt;&lt; &quot;Destroying dynamic list&quot; &lt;&lt; endl;\n  delete dynList;\n\n  cout &lt;&lt; &quot;Checking that removed items do not appear to be in a list&quot; &lt;&lt; endl;\n  for (elem = 0; elem &lt; len; elem++)\n  {\n    if (items[elem].GetList() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still in a list&quot; &lt;&lt; endl;\n    }\n    if (items[elem].GetNext() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a next ptr&quot; &lt;&lt; endl;\n    }\n    if (items[elem].GetPrevious() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a previous ptr&quot; &lt;&lt; endl;\n    }\n  }\n  cout &lt;&lt; errors &lt;&lt; &quot; errors detected&quot; &lt;&lt; endl;\n}\n\nint main(int argc, const char * argv[])\n{\n  ListWines();\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  TestWine.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;List.h&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Wine.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">static<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Contents of list:&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (ListItem *item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Wine *wine = (Wine *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;-----Dump------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---End Dump----&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">static<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">ListWines<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">beaujolais<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Beaujolais&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1970<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">amontillado<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Amontillado&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1964<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">riesling<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Riesling&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1980<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">gewurztraminer<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Gewurztraminer&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">1993<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">shiraz<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Shiraz&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2003<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine <\/span><span style=\"color: #795E26\">cabernet<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Cabernet Sauvignon&quot;<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">2001<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Each item in the following list is an instance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ of ListItem, each pointing to its corresponding<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Wine instance.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem items[] = { &amp;beaujolais, &amp;amontillado,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                       &amp;riesling,   &amp;gewurztraminer,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                       &amp;shiraz,     &amp;cabernet };<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem *item;<\/span><span style=\"color: #008000\"> \/\/ Item pointer used in several places<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wine *wine;<\/span><span style=\"color: #008000\">     \/\/ Wine pointer used in many places<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List list;<\/span><span style=\"color: #008000\">      \/\/ The list of wines<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ The following List iterator is positioned so that<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ the list it associates with is empty at the time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ of the association.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Start testing<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Empty list...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Append&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Appending: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing a second Append&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Appending: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to front&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetLast<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to middle&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, &amp;<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;------------Iterator testing------------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing iterator originally set on empty list...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Wine *wine = (Wine *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Now reversing direction on iterator...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Wine *wine = (Wine *)<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Reversing direction again...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Wine *wine = (Wine *)<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;--------End Iterator testing------------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from middle&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from front&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal of last item&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  wine = (Wine *)(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">wine<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">].<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Finally, we test the actions of the List destructor<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ First, go through the items to check that they are not in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ a list...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking that removed items do not appear to be in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> len = <\/span><span style=\"color: #0000FF\">sizeof<\/span><span style=\"color: #000000\">(items)\/<\/span><span style=\"color: #0000FF\">sizeof<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elem;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> errors = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem &lt; len; elem++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a next ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a previous ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Now, create the list and populate it from the items<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking addition and removal to a dynamic list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List *dynList = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">List<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = len-<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">; elem &gt;= <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem--)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">dynList<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Display the list for validation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(*dynList);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Now destroy the list and examine the state of each<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ of the items that were in the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Destroying dynamic list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #000000\"> dynList;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking that removed items do not appear to be in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem &lt; len; elem++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a next ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem].<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a previous ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; errors &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; errors detected&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListWines<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\"><\/div>\n<\/div>\n\n\n\n<h5 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Persons\"><\/span>Persons<span class=\"ez-toc-section-end\"><\/span><\/h5>\n\n\n\n<p>Now, let&#8217;s look at an alternative approach to using such <strong><code>List<\/code><\/strong>s, <strong><code>ListItem<\/code><\/strong>s, etc.<\/p>\n\n\n\n<p>You may notice that it&#8217;s a little clumsy to separate a&nbsp;<strong>ListItem<\/strong>&nbsp;from the data it represents. Here&#8217;s another, slightly different, approach that makes things a little easier:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Person.h\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#ifndef Person_h\n#define Person_h\n\n#include &lt;string&gt;\nusing namespace std;\n\n#include &quot;List.h&quot;\n\nclass Person\n{\npublic:\n  Person(const string &amp;name);\n  Person(const Person &amp;person);\n  ~Person();\n\n  const string &amp;Name() const\n  {\n      return m_name;\n  }\n\n  void Add(List &amp;list, Person *prevPerson);\n  void Remove();\n\n  void Print() const;\n\n  \/\/ Assignment operator\n  Person &amp;operator=(const Person &amp;person);\n\n  \/\/ Conversion function to ListItem &amp;\n  operator ListItem &amp;()\n  {\n      return m_item;\n  }\n\nprivate:\n  ListItem  m_item;\n  string    m_name;\n};\n\n#endif \/* Person_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Person.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Person_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Person_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;List.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Person<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Person<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">name<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Person<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Person<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #795E26\">Name<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #001080\">prevPerson<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Assignment operator<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator=<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Conversion function to ListItem &amp;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">operator<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">ListItem<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #AF00DB\">&amp;<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_item;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem  m_item;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  string    m_name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Person_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Person.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\nusing namespace std;\n\n#include &quot;Person.h&quot;\n\nPerson::Person(const string &amp;name)\n    : m_item(this), m_name(name)\n{}\n\nvoid Person::Print() const\n{\n  cout &lt;&lt; &quot;Person: &quot; &lt;&lt; m_name &lt;&lt; endl;\n}\n\n\/\/ You implement the remaining member functions of the Person class\n\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Person.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Person.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Person<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> string &amp;name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    : <\/span><span style=\"color: #795E26\">m_item<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">this<\/span><span style=\"color: #000000\">), <\/span><span style=\"color: #795E26\">m_name<\/span><span style=\"color: #000000\">(name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Person<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Person: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; m_name &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ You implement the remaining member functions of the Person class<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>&#8230; and here&#8217;s a test program for Persons:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  TestPerson.cpp\n\/\/  Assignment 4: Linked Lists\n\/\/\n\/\/  Created by Bryan Higgs on 10\/31\/24.\n\/\/\n\n#include &lt;iostream&gt;\nusing namespace std;\n\n#include &quot;List.h&quot;\n#include &quot;Person.h&quot;\n\nstatic void display(List &amp;list)\n{\n  cout &lt;&lt; &quot;Contents of list:&quot; &lt;&lt; endl;\n  ListIterator iter(list);\n  for (ListItem *item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext()\n      )\n  {\n    Person *person = (Person *)(item-&gt;GetData());\n    person-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;-----Dump------&quot; &lt;&lt; endl;\n  list.Dump();\n  cout &lt;&lt; &quot;---End Dump----&quot; &lt;&lt; endl;\n}\n\nstatic void ListPersons()\n{\n  Person fred(&quot;Fred&quot;);\n  Person mary(&quot;Mary&quot;);\n  Person joe(&quot;Joe&quot;);\n  Person clive(&quot;Clive&quot;);\n  Person nigel(&quot;Nigel&quot;);\n  Person nostradamus(&quot;Nostradamus&quot;);\n  Person einstein(&quot;Einstein&quot;);\n\n  Person *items[] = { &amp;fred, &amp;mary, &amp;joe, &amp;clive,\n                      &amp;nigel, &amp;nostradamus, &amp;einstein };\n\n  ListItem *item;\n\n  List list;      \/\/ The list of people\n\n  \/\/ The following List iterator is positioned so that\n  \/\/ the list it associates with is empty at the time\n  \/\/ of the association.\n  ListIterator iter(list);\n  \n  \/\/ Start testing\n\n  cout &lt;&lt; &quot;Empty list...&quot; &lt;&lt; endl;\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Append&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Appending: &quot;;\n  fred.Print();\n  list.Append(fred);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing a second Append&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Appending: &quot;;\n  nigel.Print();\n  list.Append(nigel);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to front&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  mary.Print();\n  mary.Add(list, 0);\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  joe.Print();\n  joe.Add(list, (Person *)(list.GetLast()));\n  display(list);\n\n  cout &lt;&lt; &quot;Testing Add to middle&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Adding: &quot;;\n  clive.Print();\n  clive.Add(list, &amp;mary);\n  display(list);\n\n  cout &lt;&lt; &quot;------------Iterator testing------------&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot;Testing iterator originally set on empty list...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext())\n  {\n    Person *person = (Person *)(item-&gt;GetData());\n    person-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;Now reversing direction on iterator...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetPrevious()\n      )\n  {\n    Person *person = (Person *)(item-&gt;GetData());\n    person-&gt;Print();\n  }\n\n  cout &lt;&lt; &quot;Reversing direction again...&quot; &lt;&lt; endl;\n  for (item = iter.GetCurrent();\n       item != 0;\n       item = iter.GetNext()\n      )\n  {\n    Person *person = (Person *)(item-&gt;GetData());\n    person-&gt;Print();\n  }\n  cout &lt;&lt; &quot;--------End Iterator testing------------&quot; &lt;&lt; endl;\n\n  cout &lt;&lt; &quot;Testing removal from middle&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  clive.Print();\n  clive.Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  joe.Print();\n  joe.Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from front&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  mary.Print();\n  mary.Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal from end&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  nigel.Print();\n  nigel.Remove();\n  display(list);\n\n  cout &lt;&lt; &quot;Testing removal of last item&quot; &lt;&lt; endl;\n  cout &lt;&lt; &quot; Removing: &quot;;\n  fred.Print();\n  fred.Remove();\n  display(list);\n\n  \/\/ Finally, we test the actions of the List destructor\n\n  \/\/ First, go through the items to check that they are not in\n  \/\/ a list...\n  cout &lt;&lt; &quot;Checking that removed items do not appear to be in a list&quot; &lt;&lt; endl;\n  int len = sizeof(items)\/sizeof(items[0]);\n  int elem;\n  int errors = 0;\n  for (elem = 0; elem &lt; len; elem++)\n  {\n    ListItem &amp;item = *(items[elem]);\n    if (item.GetList() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still in a list&quot; &lt;&lt; endl;\n    }\n    if (item.GetNext() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a next ptr&quot; &lt;&lt; endl;\n  }\n    if (item.GetPrevious() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a previous ptr&quot; &lt;&lt; endl;\n    }\n  }\n  \n  \/\/ Now, create the list and populate it from the items\n  cout &lt;&lt; &quot;Checking addition and removal to a dynamic list&quot; &lt;&lt; endl;\n  List *dynList = new List();\n  for (elem = len-1; elem &gt;= 0; elem--)\n  {\n    dynList-&gt;Append(*(items[elem]));\n  }\n  \n  \/\/ Display the list for validation\n  display(*dynList);\n\n  \/\/ Now destroy the list and examine the state of each\n  \/\/ of the items that were in the list\n  cout &lt;&lt; &quot;Destroying dynamic list&quot; &lt;&lt; endl;\n  delete dynList;\n\n  cout &lt;&lt; &quot;Checking that removed items do not appear to be in a list&quot; &lt;&lt; endl;\n  for (elem = 0; elem &lt; len; elem++)\n  {\n    ListItem &amp;item = *(items[elem]);\n    if (item.GetList() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still in a list&quot; &lt;&lt; endl;\n    }\n    if (item.GetNext() != 0)\n    {\n      errors++;\n      cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a next ptr&quot; &lt;&lt; endl;\n    }\n    if (item.GetPrevious() != 0)\n    {\n        errors++;\n        cerr &lt;&lt; &quot;Element &quot; &lt;&lt; elem &lt;&lt; &quot; still has a previous ptr&quot; &lt;&lt; endl;\n    }\n  }\n  cout &lt;&lt; errors &lt;&lt; &quot; errors detected&quot; &lt;&lt; endl;\n}\n\nint main()\n{\n  ListPersons();\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  TestPerson.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Assignment 4: Linked Lists<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 10\/31\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">using<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">namespace<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;List.h&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Person.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">static<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">List<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Contents of list:&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (ListItem *item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Person *person = (Person *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;-----Dump------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Dump<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;---End Dump----&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">static<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">ListPersons<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">fred<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Fred&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">mary<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Mary&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">joe<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Joe&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">clive<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Clive&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">nigel<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Nigel&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">nostradamus<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Nostradamus&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person <\/span><span style=\"color: #795E26\">einstein<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #A31515\">&quot;Einstein&quot;<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Person *items[] = { &amp;fred, &amp;mary, &amp;joe, &amp;clive,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">                      &amp;nigel, &amp;nostradamus, &amp;einstein };<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListItem *item;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List list;<\/span><span style=\"color: #008000\">      \/\/ The list of people<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ The following List iterator is positioned so that<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ the list it associates with is empty at the time<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ of the association.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  ListIterator <\/span><span style=\"color: #795E26\">iter<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Start testing<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Empty list...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Append&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Appending: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">fred<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(fred);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing a second Append&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Appending: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">nigel<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(nigel);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to front&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">mary<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">mary<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">joe<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">joe<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, (Person *)(<\/span><span style=\"color: #001080\">list<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetLast<\/span><span style=\"color: #000000\">()));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing Add to middle&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Adding: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">clive<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">clive<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Add<\/span><span style=\"color: #000000\">(list, &amp;mary);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;------------Iterator testing------------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing iterator originally set on empty list...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Person *person = (Person *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Now reversing direction on iterator...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Person *person = (Person *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Reversing direction again...&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetCurrent<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">       item = <\/span><span style=\"color: #001080\">iter<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    Person *person = (Person *)(<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">GetData<\/span><span style=\"color: #000000\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">person<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;--------End Iterator testing------------&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from middle&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">clive<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">clive<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">joe<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">joe<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from front&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">mary<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">mary<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal from end&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">nigel<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">nigel<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Testing removal of last item&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; Removing: &quot;<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">fred<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">fred<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Remove<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(list);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Finally, we test the actions of the List destructor<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ First, go through the items to check that they are not in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ a list...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking that removed items do not appear to be in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> len = <\/span><span style=\"color: #0000FF\">sizeof<\/span><span style=\"color: #000000\">(items)\/<\/span><span style=\"color: #0000FF\">sizeof<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elem;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> errors = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem &lt; len; elem++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    ListItem &amp;item = *(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a next ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a previous ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Now, create the list and populate it from the items<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking addition and removal to a dynamic list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  List *dynList = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">List<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = len-<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">; elem &gt;= <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem--)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">dynList<\/span><span style=\"color: #000000\">-&gt;<\/span><span style=\"color: #795E26\">Append<\/span><span style=\"color: #000000\">(*(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem]));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Display the list for validation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">display<\/span><span style=\"color: #000000\">(*dynList);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Now destroy the list and examine the state of each<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ of the items that were in the list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Destroying dynamic list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #000000\"> dynList;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Checking that removed items do not appear to be in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (elem = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; elem &lt; len; elem++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    ListItem &amp;item = *(<\/span><span style=\"color: #001080\">items<\/span><span style=\"color: #000000\">[elem]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetList<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still in a list&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetNext<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a next ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">item<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetPrevious<\/span><span style=\"color: #000000\">() != <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        errors++;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Element &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; elem &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; still has a previous ptr&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  cout &lt;&lt; errors &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; errors detected&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">ListPersons<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\"><\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testing_Your_Implementation-2\"><\/span><em>Testing Your Implementation<\/em><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>You will need to do a reasonable amount of testing to ensure that your implementation of these classes actually works correctly. The above&nbsp;<code><strong>TestWine.cpp<\/strong><\/code>&nbsp;and&nbsp;<code><strong>TestPerson.cpp<\/strong><\/code>&nbsp;files do some reasonable amount of testing, but don&#8217;t feel restricted by them.&nbsp; <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>If you do add your own tests, please create your own test main program &#8212; it&#8217;s much easier for me to separate out your efforts from mine!<\/p>\n<\/blockquote>\n\n\n\n<p>I strongly suggest that you freely&nbsp;<em>instrument<\/em>&nbsp;your code so that you can turn on tracing and debugging information when convenient and\/or necessary. Adding a line like:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>cout &lt;&lt; \"Adding item at \" &lt;&lt; this &lt;&lt; \" after item at \" &lt;&lt; prevItem\n     &lt;&lt; \" and before item at \" &lt;&lt; nextItem &lt;&lt; endl;<\/strong><\/code><\/pre>\n\n\n\n<p>at the appropriate place in your code can really help you figure out what&#8217;s going on.&nbsp; However, I don&#8217;t need to see all these lines of code, so just use them for your debugging, and then clean them out so I can read your code.<\/p>\n\n\n\n<p>Note that the calls to the <strong><code>Dump()<\/code><\/strong> member functions may give you as much information as you need, but then again, if you need to do your own tracing, you need to do it.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>It is important that you have tested the program sufficiently. Since you will be using and enhancing these classes in later assignments, it&#8217;s to your advantage to make sure that they work, now!<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Linked Lists What is a Linked List? Linked lists are among the most useful data structures in Computer Science, and are therefore very heavily used in lots of different applications. For this assignment, we will concentrate on the&nbsp;doubly-linked list, which is perhaps the most useful of all linked lists. Here&#8217;s what a doubly-linked list looks [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":29,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-33","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":6,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/33\/revisions"}],"predecessor-version":[{"id":1690,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/33\/revisions\/1690"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/29"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/media?parent=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}