C++ Program help: What the program does: I need to write a class ArrayList that
ID: 3927648 • Letter: C
Question
C++ Program help:
What the program does: I need to write a class ArrayList that represents an array of integers. Initially it has a capacity of 1 and is “empty”.
At any time, it can be partially full, so it keeps track of its current occupied size, as well as its capacity
(true size).
I have written a code but i need help writing two more methods. Thank you.
1 a. I need to write a function “erase(int m)”. This function deletes the leftmost occurrence of the number ‘m’ from
the array by shifting everything to its right by one position to the left. Note: the size of the
occupied part of the array reduces by 1. If the array’s occupancy reduces to less than 50%, make
the array half as big similar to how you expanded it.
b. A function “string toString()” that returns a string that contains the contents of the array list in
order within “[ ]”.
This is my code so far with my main method to test if the code works
#include
#include
using namespace std;
// class arralist
class ArrayList
{
private:
int *array;
int capacity,asize;
public:
int size();
ArrayList();
int & operator [](unsigned int);
void push_back(int);
};
// 1.a: Default constructor used to unitialize the array with capacity=1
ArrayList::ArrayList()
{
asize=1;
capacity=1;
array=new int(capacity);
array[asize-1]=0;
}
// This function returns the actual size of array
int ArrayList::size()
{ return asize;}
// 1.b:The overloaded [] oprtaor return element at ith position in array
int & ArrayList::operator [](unsigned int i)
{
if(i>=asize)
{cout<<"invalid reference ";
exit(0);
}
return *(array+i);
}
//1.c: This function push m at the end of the array
void ArrayList::push_back(int m)
{
// this condition checks if size is beyond capacity or not. if so double the capacity.
if(asize==capacity)
{
capacity=2*capacity;
int *temp=new int(capacity);
for(int i=0;i temp[i]=array[i];
int *array=new int(capacity);
for(int i=0;i array[i]=temp[i];
}
array[asize]=m;
asize=asize+1;
}
//---------------------------
//You can test above class by using main() below
int main()
{
ArrayList arr; // call ro default constructor
for (int i=1;i<=50;i++)
{
arr.push_back(i); // call to push_back()
}
cout << "Should contain numbers 1..50, is ";
for (int i=1;i
{
cout<<" "< }
return 0;
}
Explanation / Answer
#include <iostream>
#include <stdlib.h>
#include <sstream>
using namespace std;
// class arralist
class ArrayList
{
private:
int *array;
int capacity, asize;
public:
int size();
ArrayList();
int & operator [](unsigned int);
void push_back(int);
void erase(int m);
string toString();
};
// 1.a: Default constructor used to unitialize the array with capacity=1
ArrayList::ArrayList()
{
asize = 0;
capacity = 1;
array = new int[capacity];
}
// This function returns the actual size of array
int ArrayList::size()
{
return asize;
}
// 1.b:The overloaded [] oprtaor return element at ith position in array
int & ArrayList::operator [](unsigned int i)
{
if(i >= asize)
{
cout << "invalid reference ";
exit(0);
}
return *(array + i);
}
//1.c: This function push m at the end of the array
void ArrayList::push_back(int m)
{
// this condition checks if size is beyond capacity or not. if so double the capacity.
if(asize == capacity)
{
capacity = 2 * capacity;
int *temp = new int[capacity];
for(int i = 0; i < asize; i++)
temp[i] = array[i];
array = new int[capacity];
for(int i = 0; i < asize; i++)
array[i] = temp[i];
}
array[asize] = m;
asize = asize + 1;
}
void ArrayList::erase(int m){
int pos = -1;
for(int i = 0; i < asize; i++){
if(array[i] == m){
pos = i;
break;
}
}
if(pos == -1){
cout << "Element not presen ";
}
else{
for(int i = pos; i < asize - 1; i++){
array[i] = array[i + 1];
}
}
asize--;
if(asize == capacity / 2)
{
capacity = capacity / 2;
int *temp = new int[capacity];
for(int i = 0; i < asize; i++)
temp[i] = array[i];
array = new int[capacity];
for(int i = 0; i < asize; i++)
array[i] = temp[i];
}
}
string ArrayList::toString(){
string str = "[";
for(int i = 0; i < asize; i++){
ostringstream oss;
oss << array[i];
str += oss.str();
if(i != asize - 1){
str += ", ";
}
}
str += "]";
return str;
}
//---------------------------
//You can test above class by using main() below
int main()
{
ArrayList arr; // call ro default constructor
for (int i = 1; i <= 50; i++)
{
arr.push_back(i); // call to push_back()
}
cout << "Should contain numbers 1..50, is ";
cout << arr.toString();
cout << " ";
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.