Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

13.4) Modify the set class you developed in Chapter 12(called unorderedSetType b

ID: 3828484 • Letter: 1

Question

13.4)

Modify the set class you developed in Chapter 12(called unorderedSetType below) to make it a template. Revise your test program to show that your template works with a data type that is not int for the elements of the set. Use the template versions for the unorderedArrayListType and arrayListType classes are attached.

//arrayListType:

#ifndef H_arrayListType
#define H_arrayListType

#include
using namespace std;

template
class arrayListType
{
public:
    const arrayListType&
                  operator=(const arrayListType&);
       //Overloads the assignment operator

    bool isEmpty() const;
      //Function to determine whether the list is empty
      //Postcondition: Returns true if the list is empty;
      //               otherwise, returns false.

    bool isFull() const;
      //Function to determine whether the list is full
      //Postcondition: Returns true if the list is full;
      //               otherwise, returns false.

    int listSize() const;
      //Function to determine the number of elements in
      //the list.
      //Postcondition: Returns the value of length.

    int maxListSize() const;
      //Function to determine the maximum size of the list
      //Postcondition: Returns the value of maxSize.

    void print() const;
      //Function to output the elements of the list
      //Postcondition: Elements of the list are output on the
      //               standard output device.

    bool isItemAtEqual(int location, const elemType& item) const;
      //Function to determine whether item is the same as
      //the item in the list at the position specified
      //by location.
      //Postcondition: Returns true if the list[location]
      //               is the same as item; otherwise,
      //               returns false.
      //               If location is out of range, an
      //               appropriate message is displayed.

    virtual void insertAt(int location, const elemType& insertItem) = 0;
      //Function to insert insertItem in the list at the
      //position specified by location.
      //Note that this is an abstract function.
      //Postcondition: Starting at location, the elements of
      //               the list are shifted down,
      //               list[location] = insertItem; length++;  
      //               If the list is full or location is out of
      //               range, an appropriate message is displayed.

    virtual void insertEnd(const elemType& insertItem) = 0;
      //Function to insert insertItem an item at the end of
      //the list. Note that this is an abstract function.
      //Postcondition: list[length] = insertItem; and length++;
      //               If the list is full, an appropriate
      //               message is displayed.

    void removeAt(int location);
      //Function to remove the item from the list at the
      //position specified by location
      //Postcondition: The list element at list[location] is
      //               removed and length is decremented by 1.
      //               If location is out of range, an
      //               appropriate message is displayed.

    void retrieveAt(int location, elemType& retItem) const;
      //Function to retrieve the element from the list at the
      //position specified by location
      //Postcondition: retItem = list[location]
      //               If location is out of range, an
      //               appropriate message is displayed.

    virtual void replaceAt(int location, const elemType& repItem) = 0;
      //Function to replace repItem the elements in the list
      //at the position specified by location.
      //Note that this is an abstract function.
      //Postcondition: list[location] = repItem
      //               If location is out of range, an
      //               appropriate message is displayed.

    void clearList();
      //Function to remove all the elements from the list
      //After this operation, the size of the list is zero.
      //Postcondition: length = 0;

    virtual int seqSearch(const elemType& searchItem) const = 0;
      //Function to search the list for searchItem.
      //Note that this is an abstract function.
      //Postcondition: If the item is found, returns the
      //               location in the array where the item is
      //               found; otherwise, returns -1.

    virtual void remove(const elemType& removeItem) = 0;
      //Function to remove removeItem from the list.
      //Note that this is an abstract function.
      //Postcondition: If removeItem is found in the list,
      //               it is removed from the list and length
      //               is decremented by one.

    arrayListType(int size = 100);
      //Constructor
      //Creates an array of the size specified by the
      //parameter size. The default array size is 100.
      //Postcondition: The list points to the array, length = 0,
      //               and maxSize = size;

    arrayListType (const arrayListType& otherList);
       //Copy constructor

    virtual ~arrayListType();
      //Destructor
      //Deallocate the memory occupied by the array.

protected:
    elemType *list; //array to hold the list elements
    int length;     //variable to store the length of the list
    int maxSize;    //variable to store the maximum
                    //size of the list
};


template
bool arrayListType::isEmpty() const
{
    return (length == 0);
}

template
bool arrayListType::isFull() const
{
    return (length == maxSize);
}

template
int arrayListType::listSize() const
{
   return length;
}

template
int arrayListType::maxListSize() const
{
   return maxSize;
}

template
void arrayListType::print() const
{
    for (int i = 0; i < length; i++)
        cout << list[i] << " ";
    cout << endl;
}

template
bool arrayListType::isItemAtEqual(int location,
                                            const elemType& item) const
{
    if (location < 0 || location >= length)
    {
        cout << "The location of the item to be removed "
             << "is out of range." << endl;

        return false;
    }
    else
        return (list[location] == item);
}

template
void arrayListType::removeAt(int location)
{
    if (location < 0 || location >= length)
        cout << "The location of the item to be removed "
             << "is out of range." << endl;
    else
    {
        for (int i = location; i < length - 1; i++)
            list[i] = list[i + 1];

        length--;
    }
} //end removeAt

template
void arrayListType::retrieveAt(int location,
                                       elemType& retItem) const
{
    if (location < 0 || location >= length)
        cout << "The location of the item to be retrieved is "
             << "out of range" << endl;
    else
        retItem = list[location];
} //end retrieveAt

template
void arrayListType::clearList()
{
    length = 0;
} //end clearList

template
arrayListType::arrayListType(int size)
{
    if (size <= 0)
    {
        cout << "The array size must be positive. Creating "
             << "an array of the size 100. " << endl;

        maxSize = 100;
    }
    else
        maxSize = size;

    length = 0;

    list = new elemType[maxSize];
}

template
arrayListType::~arrayListType()
{
    delete [] list;
}

template
arrayListType::arrayListType(const arrayListType& otherList)
{
    maxSize = otherList.maxSize;
    length = otherList.length;

    list = new elemType[maxSize];    //create the array

    for (int j = 0; j < length; j++) //copy otherList
        list [j] = otherList.list[j];
}//end copy constructor


template
const arrayListType& arrayListType::operator=
                             (const arrayListType& otherList)
{
    if (this != &otherList)    //avoid self-assignment
    {
        delete [] list;
        maxSize = otherList.maxSize;
        length = otherList.length;

        list = new elemType[maxSize];

        for (int i = 0; i < length; i++)
            list[i] = otherList.list[i];
    }
    return *this;
}


#endif

//unorderedArraylistType:

#ifndef H_unorderedArrayListType
#define H_unorderedArrayListType

#include "arrayListType.h"

template
class unorderedArrayListType: public arrayListType
{
public:
    void insertAt(int location, const elemType& insertItem);
    void insertEnd(const elemType& insertItem);
    void replaceAt(int location, const elemType& repItem);
    int seqSearch(const elemType& searchItem) const;
    void remove(const elemType& removeItem);

    unorderedArrayListType(int size = 100);
      //Constructor

};

template
void unorderedArrayListType::insertAt(int location,
                                         const elemType& insertItem)
{
    if (location < 0 || location >= this->maxSize)
        cout << "The position of the item to be inserted "
             << "is out of range." << endl;
    else if (this->length >= this->maxSize) //list is full
        cout << "Cannot insert in a full list" << endl;
    else
    {
        for (int i = this->length; i > location; i--)
            this->list[i] = this->list[i - 1];   //move the elements down

        this->list[location] = insertItem; //insert the item at
                                     //the specified position

        this->length++;   //increment the length
    }
} //end insertAt

template
void unorderedArrayListType::insertEnd
                                 (const elemType& insertItem)
{
    if (this->length >= this->maxSize) //the list is full
        cout << "Cannot insert in a full list." << endl;
    else
    {
        this->list[this->length] = insertItem; //insert the item at the end
        this->length++; //increment the length
    }
} //end insertEnd

template
int unorderedArrayListType::seqSearch
                            (const elemType& searchItem) const
{
    int loc;
    bool found = false;

    for (loc = 0; loc < this->length; loc++)
        if (this->list[loc] == searchItem)
        {
            found = true;
            break;
        }

    if (found)
        return loc;
    else
        return -1;
} //end seqSearch

template
void unorderedArrayListType::remove
                               (const elemType& removeItem)
{
    int loc;

    if (this->length == 0)
        cout << "Cannot delete from an empty list." << endl;
    else
    {
        loc = seqSearch(removeItem);

        if (loc != -1)
            this->removeAt(loc);
        else
            cout << "The item to be deleted is not in the list."
                 << endl;
    }
} //end remove

template
void unorderedArrayListType::replaceAt(int location,
                                       const elemType& repItem)
{
    if (location < 0 || location >= this->length)
        cout << "The location of the item to be "
             << "replaced is out of range." << endl;
    else
        this->list[location] = repItem;
} //end replaceAt

template
unorderedArrayListType::unorderedArrayListType(int size)
                       : arrayListType(size)
{
}

//unorderedSetType class:

#ifndef UNORDEREDSETTYPE_H_INCLUDED
#define UNORDEREDSETTYPE_H_INCLUDED

#include "unorderedArrayListType.h"

using namespace std;


class unorderedSetType: public unorderedArrayListType
{
private:

    void insertAt(int location, int insertItem);// inserts item in list
// postcondition item is not in list already

public:

     void insertEnd(int insertItem); // inserts item in list at the end
// as specified by the user postcondition location must be valid and is not
// already in the list

     void setUnion(unorderedSetType intList, unorderedSetType intList2);// combines the first two list into one
// to create the third list postcondition duplicate numbers will ignored

     void getIntersection(unorderedSetType intList, unorderedSetType intList2);// sets fourth list
// by inserting object where specified

     void replaceAt(int searchItem, int repItem);// checks list and replaces where specified by user
//

     unorderedSetType(int size = 100);//constructor

};

#endif UNORDEREDSETTYPE_H_INCLUDED


#endif

#include
#include "unorderedSetType.h"

using namespace std;

void unorderedSetType::insertAt(int location, int insertItem)
{
    insertEnd(insertItem);
}

void unorderedSetType::insertEnd(int insertItem)
{
    int searchItem = insertItem;
    int loc;
    loc = unorderedArrayListType::seqSearch(searchItem);

    if (length >= maxSize) //the list is full
    {
        cout << "Cannot insert in a full list." << endl;
    }
    else if(loc >= 0)
    {
        cout << list[loc] << " is already in list. Ignoring request." << endl << endl;
    }
    else
    {
        list[length] = insertItem; //insert the item at the end
        length++; //increment the length
    }
}

void unorderedSetType::replaceAt(int searchItem, int repItem)
{
    int loc;
    loc = unorderedArrayListType::seqSearch(searchItem);

    if (loc < 0 || loc >= length)
    {
        cout << "The location of the item to be replaced is out of range." << endl;
    }
    else if(unorderedArrayListType::seqSearch(repItem) >= 0)
    {
        cout << list[unorderedArrayListType::seqSearch(repItem)] << " is already in list. Ignoring request." << endl << endl;
    }
    else
    {
        list[loc] = repItem;
    }
}

void unorderedSetType::setUnion(unorderedSetType intList, unorderedSetType intList2)
{
    unorderedSetType testUnion;
    int look;

    for (int i = 0; i < 8; i++)
    {
        look = intList.list[i];
        testUnion.insertEnd(look);
        look = intList2.list[i];
        testUnion.insertEnd(look);
    }

    cout << "Third list (union): ";
    testUnion.print();
    cout << endl;
}

void unorderedSetType::getIntersection(unorderedSetType intList, unorderedSetType intList2)
{
    unorderedSetType testIntersection;
    int look;

    for (int i = 0; i < 8; i++)
    {
        look = intList.list[i];
        if(intList2.seqSearch(look) >= 0)
        {
            testIntersection.insertEnd(look);
        }
    }

    cout << "Fourth list (intersection): ";
    testIntersection.print();
    cout << endl;
}

unorderedSetType::unorderedSetType(int size)
{
} //end constructor

//original test program:

#include
#include "unorderedSetType.h"
#include "unorderedArrayListType.h"
#include "arrayListType.h"

using namespace std;

int main()
{
    unorderedSetType intList(25);
    unorderedSetType intList2(25);
    unorderedSetType testUnion(50);
    unorderedSetType testIntersection(25);

    int number, repItem, searchItem;

    cout << "Enter 8 integers: ";

    for (int count = 0; count < 8; count++)
    {
        cin >> number;
        intList.insertEnd(number);
    }

    number = 0;

    cout << "Enter 8 integers (2nd set): ";

    for (int count = 0; count < 8; count++)
    {
        cin >> number;
        intList2.insertEnd(number);
    }

    cout << endl;
    cout << "intList: ";
    intList.print();
    cout << endl;

    cout << "intList2: ";
    intList2.print();
    cout << endl;

    cout << "Attempting to run a union function on lists 1 and 2..." << endl;
    testUnion.setUnion(intList, intList2);

    cout << "Attempting to run an intersection function on lists 1 and 2..." << endl;
    testIntersection.getIntersection(intList, intList2);

    cout << "Enter the number to be replaced (list 1): ";
    intList.print();
    cout << endl;
    cin >> searchItem;
    cout << endl << "Enter the number you would like to replace '" << searchItem << "' with in list 1: ";
    cin >> repItem;
    cout << endl;

    intList.replaceAt(searchItem, repItem);

    cout << "List 1, following replacement function: ";
    intList.print();
    cout << endl;

   return 0;
}

Explanation / Answer

//unorderedSetType.h
//unorderedSetType class:
#ifndef UNORDEREDSETTYPE_H_INCLUDED
#define UNORDEREDSETTYPE_H_INCLUDED
#include "arrayListType.h"
using namespace std;
template<class elemType>
class unorderedSetType : public arrayListType<elemType>
{
private:
   void insertAt(int location, const elemType& insertItem);// inserts item in list
   // postcondition item is not in list already
public:
   void insertEnd(const elemType& insertItem); // inserts item in list at the end
   // as specified by the user postcondition location must be valid and is not
   // already in the list
   void setUnion(unorderedSetType<elemType> List1, unorderedSetType<elemType> List2);// combines the first two list into one
   // to create the third list postcondition duplicate numbers will ignored
   void getIntersection(unorderedSetType<elemType> List1, unorderedSetType<elemType> List2);// sets fourth list
   // by inserting object where specified
   void replaceAt(int searchItem, const elemType& repItem);// checks list and replaces where specified by user
   //
   int seqSearch(const elemType& searchItem) const;
   void remove(const elemType& removeItem);
   unorderedSetType(int size = 100);//constructor
};
#endif UNORDEREDSETTYPE_H_INCLUDED

//unorderedSetType.cpp
#include "unorderedSetType.h"
using namespace std;
template<class elemType>
void unorderedSetType<elemType>::insertAt(int location, const elemType& insertItem)
{
   insertEnd(insertItem);
}
template<class elemType>
void unorderedSetType<elemType>::insertEnd(const elemType& insertItem)
{
   elemType searchItem = insertItem;
   int loc;
   loc = seqSearch(searchItem);
   if (this->length >= this->maxSize) //the list is full
   {
       cout << "Cannot insert in a full list." << endl;
   }
   else if (loc >= 0)
   {
       cout << list[loc] << " is already in list. Ignoring request." << endl << endl;
   }
   else
   {
       list[this->length] = insertItem; //insert the item at the end
       this->length++; //increment the length
   }
}
template<class elemType>
void unorderedSetType<elemType>::replaceAt(int searchItem, const elemType& repItem)
{
   int loc;
   loc = seqSearch(searchItem);
   if (loc < 0 || loc >= length)
   {
       cout << "The location of the item to be replaced is out of range." << endl;
   }
   else if (seqSearch(repItem) >= 0)
   {
       cout << list[seqSearch(repItem)] << " is already in list. Ignoring request." << endl << endl;
   }
   else
   {
       list[loc] = repItem;
   }
}

template<class elemType>
void unorderedSetType<elemType>::setUnion(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2)
{
   unorderedSetType testUnion;
   int look;
   for (int i = 0; i < (intList.length + intList2.length); i++)
   {
       look = intList.list[i];
       testUnion.insertEnd(look);
       look = intList2.list[i];
       testUnion.insertEnd(look);
   }
   cout << "Third list (union): ";
   testUnion.print();
   cout << endl;
}
template<class elemType>
void unorderedSetType<elemType>::getIntersection(unorderedSetType<elemType> intList, unorderedSetType<elemType> intList2)
{
   unorderedSetType testIntersection;
   int look;
   for (int i = 0; i < (intList.length+intList2.length); i++)
   {
       look = intList.list[i];
       if (intList2.seqSearch(look) >= 0)
       {
           testIntersection.insertEnd(look);
       }
   }
   cout << "Fourth list (intersection): ";
   testIntersection.print();
   cout << endl;
}
template<class elemType>
int unorderedSetType<elemType>::seqSearch(const elemType& searchItem) const
{
   int loc;
   bool found = false;
   for (loc = 0; loc < this->length; loc++)
   {
       if (this->list[loc] == searchItem)
       {
           found = true;
           break;
       }
   }
   if (found)
       return loc;
   else
       return -1;
} //end seqSearch

template<class elemType>
void unorderedSetType<elemType>::remove(const elemType& removeItem)
{
   int loc;
   if (this->length == 0)
       cout << "Cannot delete from an empty list." << endl;
   else
   {
       loc = seqSearch(removeItem);
       if (loc != -1)
           this->removeAt(loc);
       else
           cout << "The item to be deleted is not in the list."
           << endl;
   }
} //end remove

template<class elemType>
unorderedSetType<elemType>::unorderedSetType(int size = 100):arrayListType<elemType>(size)
{
}
//end constructor

//unorderedArraylistType.h
#ifndef H_unorderedArrayListType
#define H_unorderedArrayListType
#include "arrayListType.h"
template<class elemType>
class unorderedArrayListType : public arrayListType<elemType>
{
public:
   void insertAt(int location, const elemType& insertItem);
   void insertEnd(const elemType& insertItem);
   void replaceAt(int location, const elemType& repItem);
   int seqSearch(const elemType& searchItem) const;
   void remove(const elemType& removeItem);
   unorderedArrayListType(int size = 100);
   //Constructor
};

template<class elemType>
void unorderedArrayListType<elemType>::insertAt(int location, const elemType& insertItem)
{
   if (location < 0 || location >= this->maxSize)
       cout << "The position of the item to be inserted "
       << "is out of range." << endl;
   else if (this->length >= this->maxSize) //list is full
       cout << "Cannot insert in a full list" << endl;
   else
   {
       for (int i = this->length; i > location; i--)
           this->list[i] = this->list[i - 1]; //move the elements down
       this->list[location] = insertItem; //insert the item at
       //the specified position
       this->length++; //increment the length
   }
} //end insertAt

template<class elemType>
void unorderedArrayListType<elemType>::insertEnd(const elemType& insertItem)
{
   if (this->length >= this->maxSize) //the list is full
       cout << "Cannot insert in a full list." << endl;
   else
   {
       this->list[this->length] = insertItem; //insert the item at the end
       this->length++; //increment the length
   }
} //end insertEnd

template<class elemType>
int unorderedArrayListType<elemType>::seqSearch(const elemType& searchItem) const
{
   int loc;
   bool found = false;
   for (loc = 0; loc < this->length; loc++)
   if (this->list[loc] == searchItem)
   {
       found = true;
       break;
   }
   if (found)
       return loc;
   else
       return -1;
} //end seqSearch

template<class elemType>
void unorderedArrayListType<elemType>::remove(const elemType& removeItem)
{
   int loc;
   if (this->length == 0)
       cout << "Cannot delete from an empty list." << endl;
   else
   {
       loc = seqSearch(removeItem);
       if (loc != -1)
           this->removeAt(loc);
       else
           cout << "The item to be deleted is not in the list."
           << endl;
   }
} //end remove

template<class elemType>
void unorderedArrayListType<elemType>::replaceAt(int location, const elemType& repItem)
{
   if (location < 0 || location >= this->length)
       cout << "The location of the item to be "
       << "replaced is out of range." << endl;
   else
       this->list[location] = repItem;
} //end replaceAt
template<class elemType>
unorderedArrayListType<elemType>::unorderedArrayListType(int size)
: arrayListType<elemType>(size)
{
}
#endif

//arrayListType.h
#ifndef H_arrayListType
#define H_arrayListType
#include<iostream>
#include<string>
using namespace std;
template<class elemType>
class arrayListType
{
public:
   const arrayListType&
       operator=(const arrayListType&);
   //Overloads the assignment operator
   bool isEmpty() const;
   //Function to determine whether the list is empty
   //Postcondition: Returns true if the list is empty;
   // otherwise, returns false.
   bool isFull() const;
   //Function to determine whether the list is full
   //Postcondition: Returns true if the list is full;
   // otherwise, returns false.
   int listSize() const;
   //Function to determine the number of elements in
   //the list.
   //Postcondition: Returns the value of length.
   int maxListSize() const;
   //Function to determine the maximum size of the list
   //Postcondition: Returns the value of maxSize.
   void print() const;
   //Function to output the elements of the list
   //Postcondition: Elements of the list are output on the
   // standard output device.
   bool isItemAtEqual(int location, const elemType& item) const;
   //Function to determine whether item is the same as
   //the item in the list at the position specified
   //by location.
   //Postcondition: Returns true if the list[location]
   // is the same as item; otherwise,
   // returns false.
   // If location is out of range, an
   // appropriate message is displayed.
   virtual void insertAt(int location, const elemType& insertItem) = 0;
   //Function to insert insertItem in the list at the
   //position specified by location.
   //Note that this is an abstract function.
   //Postcondition: Starting at location, the elements of
   // the list are shifted down,
   // list[location] = insertItem; length++;
   // If the list is full or location is out of
   // range, an appropriate message is displayed.
   virtual void insertEnd(const elemType& insertItem) = 0;
   //Function to insert insertItem an item at the end of
   //the list. Note that this is an abstract function.
   //Postcondition: list[length] = insertItem; and length++;
   // If the list is full, an appropriate
   // message is displayed.
   void removeAt(int location);
   //Function to remove the item from the list at the
   //position specified by location
   //Postcondition: The list element at list[location] is
   // removed and length is decremented by 1.
   // If location is out of range, an
   // appropriate message is displayed.
   void retrieveAt(int location, elemType& retItem) const;
   //Function to retrieve the element from the list at the
   //position specified by location
   //Postcondition: retItem = list[location]
   // If location is out of range, an
   // appropriate message is displayed.
   virtual void replaceAt(int location, const elemType& repItem) = 0;
   //Function to replace repItem the elements in the list
   //at the position specified by location.
   //Note that this is an abstract function.
   //Postcondition: list[location] = repItem
   // If location is out of range, an
   // appropriate message is displayed.
   void clearList();
   //Function to remove all the elements from the list
   //After this operation, the size of the list is zero.
   //Postcondition: length = 0;
   virtual int seqSearch(const elemType& searchItem) const = 0;
   //Function to search the list for searchItem.
   //Note that this is an abstract function.
   //Postcondition: If the item is found, returns the
   // location in the array where the item is
   // found; otherwise, returns -1.
   virtual void remove(const elemType& removeItem) = 0;
   //Function to remove removeItem from the list.
   //Note that this is an abstract function.
   //Postcondition: If removeItem is found in the list,
   // it is removed from the list and length
   // is decremented by one.
   arrayListType(int size = 100);
   //Constructor
   //Creates an array of the size specified by the
   //parameter size. The default array size is 100.
   //Postcondition: The list points to the array, length = 0,
   // and maxSize = size;
   arrayListType(const arrayListType& otherList);
   //Copy constructor
   virtual ~arrayListType();
   //Destructor
   //Deallocate the memory occupied by the array.
protected:
   elemType *list; //array to hold the list elements
   int length; //variable to store the length of the list
   int maxSize; //variable to store the maximum
   //size of the list
};
template<class elemType>
bool arrayListType<elemType>::isEmpty() const
{
   return (length == 0);
}
template<class elemType>
bool arrayListType<elemType>::isFull() const
{
   return (length == maxSize);
}
template<class elemType>
int arrayListType<elemType>::listSize() const
{
   return length;
}
template<class elemType>
int arrayListType<elemType>::maxListSize() const
{
   return maxSize;
}
template<class elemType>
void arrayListType<elemType>::print() const
{
   for (int i = 0; i < length; i++)
       cout << list[i] << " ";
   cout << endl;
}
template<class elemType>
bool arrayListType<elemType>::isItemAtEqual(int location, const elemType& item) const
{
   if (location < 0 || location >= length)
   {
       cout << "The location of the item to be removed "
           << "is out of range." << endl;
       return false;
   }
   else
       return (list[location] == item);
}
template<class elemType>
void arrayListType<elemType>::removeAt(int location)
{
   if (location < 0 || location >= length)
       cout << "The location of the item to be removed "
       << "is out of range." << endl;
   else
   {
       for (int i = location; i < length - 1; i++)
           list[i] = list[i + 1];
       length--;
   }
} //end removeAt
template<class elemType>
void arrayListType<elemType>::retrieveAt(int location, elemType& retItem) const
{
   if (location < 0 || location >= length)
       cout << "The location of the item to be retrieved is "
       << "out of range" << endl;
   else
       retItem = list[location];
} //end retrieveAt

template<class elemType>
void arrayListType<elemType>::clearList()
{
   length = 0;
} //end clearList

template<class elemType>
arrayListType<elemType>::arrayListType(int size)
{
   if (size <= 0)
   {
       cout << "The array size must be positive. Creating "
           << "an array of the size 100. " << endl;
       maxSize = 100;
   }
   else
       maxSize = size;
   length = 0;
   list = new elemType[maxSize];
}
template<class elemType>
arrayListType<elemType>::~arrayListType()
{
   delete[] list;
}
template<class elemType>
arrayListType<elemType>::arrayListType(const arrayListType<elemType>& otherList)
{
   maxSize = otherList.maxSize;
   length = otherList.length;
   list = new elemType[maxSize]; //create the array
   for (int j = 0; j < length; j++) //copy otherList
       list[j] = otherList.list[j];
}//end copy constructor

template<class elemType>
const arrayListType<elemType>& arrayListType<elemType>::operator=(const arrayListType<elemType>& otherList)
{
   if (this != &otherList) //avoid self-assignment
   {
       delete[] list;
       maxSize = otherList.maxSize;
       length = otherList.length;

       list = new elemType[maxSize];
       for (int i = 0; i < length; i++)
           list[i] = otherList.list[i];
   }
   return *this;
}

#endif

//Main.cpp
//original test program:
#include "unorderedSetType.h"
#include "unorderedArrayListType.h"
#include "arrayListType.h"
#include "unorderedSetType.cpp"
using namespace std;
int main()
{
   unorderedSetType<int> intList(25);
   unorderedSetType<int> intList2(25);
   unorderedSetType<float> floatList1(25);
   unorderedSetType<float> floatList2(25);
   unorderedSetType<int> testUnion(50);
   unorderedSetType<int> testIntersection(25);

   //unorderedSetType<string> stringlist2(20);
   int number, repItem, searchItem;
   cout << "Enter 4 integers: ";
   for (int count = 0; count < 4; count++)
   {
       cin >> number;
       intList.insertEnd(number);
   }
   number = 0;
   cout << "Enter 4 integers (2nd set): ";
   for (int count = 0; count < 4; count++)
   {
       cin >> number;
       intList2.insertEnd(number);
   }
   cout << endl;
   cout << "intList: ";
   intList.print();
   cout << endl;
   cout << "intList2: ";
   intList2.print();
   cout << endl;
   cout << "Attempting to run a union function on lists 1 and 2..." << endl;
   testUnion.setUnion(intList, intList2);
   cout << "Attempting to run an intersection function on lists 1 and 2..." << endl;
   testIntersection.getIntersection(intList, intList2);


   cout << "Enter the number to be replaced (list 1): ";
   intList.print();
   cout << endl;
   cin >> searchItem;
   cout << endl << "Enter the number you would like to replace '" << searchItem << "' with in list 1: ";
   cin >> repItem;
   cout << endl;
   intList.replaceAt(searchItem, repItem);
   cout << "List 1, following replacement function: ";
   intList.print();
   cout << endl;
   return 0;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote