For this assignment you will implement a dynamic array You a

For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an array that can grow and shrink. The public methods of your class should be the following:

MyDynamicArray(); Default Constructor. The array should be of size 2.

MyDynamicArray(int s); For this constructor the array should be of size s.

~MyDynamicArray(); Destructor for the class.

int& operator[](int i); Traditional [] operator. Should print a message if i is out of bounds and return a reference to a zero value.

void add(int v); increases the size of the array by 1 and stores v there.

void del(); reduces the size of the array by 1.

int length(); returns the length of the array.

int clear(); Frees any space currently used and starts over with an array of size 2.

You should write your class in the file MyDynamicArray.cpp. We will include your MyDynamicArray.cpp file into a main program that uses the dynamic array class. When the array grows or shrinks, you should print a message as seen in the sample output.


Here is a sample main.cpp file: #include <iostream> using namespace std; #include \"MyDynamicArray.cpp\"

int main() {     MyDynamicArray x;

    for (int i=0; i<100; i++){         x.add(i);

    }

    int sum = 0;     for (int i=0; i<x.length(); i++){         sum+=x[i];

    }   

    cout << \"The sum is : \" << sum << endl;     for (int i=0; i<95; i++)         x.del();

    x[60] = 27;

    

    MyDynamicArray y(10);

    for (int i=0; i<y.length(); i++) y[i] = i*i;     for (int i=0; i<200; i++){         y.add(i);

    }

    sum = 0;     for (int i=0; i<y.length(); i++){         sum+=y[i];

    }   

    cout << \"The sum is : \" << sum << endl;     for (int i=0; i<195; i++)         y.del();     y[60] = 27;     for (int i=0; i<200; i++){         y.add(i);

    }

    sum = 0;     for (int i=0; i<y.length(); i++){         sum+=y[i];

    }   

    cout << \"The sum is : \" << sum << endl;

    

}

Here is the output from the main.cpp above :

Doubling to : 4

Doubling to : 8

Doubling to : 16

Doubling to : 32

Doubling to : 64

Doubling to : 128

The sum is : 4950

Reducing to : 64

Reducing to : 32

Reducing to : 16

Out of bounds reference : 60

Doubling to : 40

Doubling to : 80

Doubling to : 160

Doubling to : 320

The sum is : 20185

Reducing to : 160

Reducing to : 80

Reducing to : 40

Out of bounds reference : 60

Doubling to : 80

Doubling to : 160

Doubling to : 320

The sum is : 20195


Solution

Please find the code implemented below.Make sure to save the file with name MyDynamicArray.cpp.

/*

* MyDynamicArray.cpp

*

* Created on: 20-Feb-2017

* Author: yourname

*/

#include <iostream>

class MyDynamicArray {

private:

   int size;

   int allocated;

   int *array;

public:

   MyDynamicArray() {

       allocated = 2;

       size = 0;

       array = new int[2];

   }

   MyDynamicArray(int s) {

       allocated = s;

       size = s;

       array = new int[s];

   }

   virtual ~MyDynamicArray() {

       delete array;

   }

   int& operator[](int i) {

       if (i >= size) {

           std::cout << \"Out of bounds reference : \" << i << std::endl;

           int t = 0;

           int *temp = &t;

           return *temp;

       }

       int *ref = &array[i];

       return *ref;

   }

   void add(int v) {

       if (size == allocated) {

           allocated *= 2;

           int *temp = new int[size];

           for (int i = 0; i < size; ++i) {

               temp[i] = array[i];

           }

           array = new int[allocated];

           for (int i = 0; i < size; ++i) {

               array[i] = temp[i];

           }

           delete[] temp;

           std::cout << \"Doubling to : \" << allocated << std::endl;

       }

       array[size++] = v;

   }

   void del() {

       if (size == 0) {

           return;

       }

       if (4 * size <= allocated) {

           allocated /= 2;

           int *temp = new int[size];

           for (int i = 0; i < size; ++i) {

               temp[i] = array[i];

           }

           array = new int[allocated];

           for (int i = 0; i < size; ++i) {

               array[i] = temp[i];

           }

           delete[] temp;

           std::cout << \"Reducing to : \" << allocated << std::endl;

       }

       --size;

   }

   int length() {

       return size;

   }

   void clear() {

       allocated = 2;

       array = new int[allocated];

       size = 0;

   }

};

For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an
For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an
For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an
For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an
For this assignment you will implement a dynamic array. You are to build a class called MyDynamicArray. Your dynamic array class should manage the storage of an

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site