In: Computer Science
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
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;
}
};