Implement MeraSet3 class similar to the last assignment. Make it unlimited, ie. use new and delete to extend or contract the memory size of the underlying array as required. Initially make it size 1, and grow it to two when you have the first insert, and so on. Similarly, reduce the size by 1 when a member element is removed.
class MeraSet3{
int *items, number;
public:
MeraSet3(): number(0) {}
int Insert(int e){
if(number == 0){
items = new int[1];
number++;
items[0] = e;
return 1;
}
for(int i = 0; i < number; i++){
if(items[i] == e) return -1;
}
items = (int*) realloc(items, ++number * sizeof(int));
items[number - 1] = e;
return 1;
}
int Remove(int e){
for(int j = 0; j < number; j++){
if(items[j] == e){
int *arr = new int[number];
for(int i = 0; i < number; i++) arr[i] = items[i];
items = (int*) realloc(items, --number * sizeof(int));
for(int i = 0, k = 0; i < number + 1; i++){
if(i == j) continue;
else{
items[k] = arr[i];
k++;
}
}
return 1;
}
}
return -1;
}
void Print(){
if(number == 0) cout<<"{}";
else{
cout<<"{";
for(int i = 0; i < number; i++) cout<<items[i]<<",";
cout<<"\b}";
}
}
int cardinality(){
return number;
}
MeraSet3 operator+(const MeraSet3 &temp){
MeraSet3 result = *this;
for(int i = 0; i < temp.number; i++) result.Insert(temp.items[i]);
return result;
}
MeraSet3 operator-(const MeraSet3 &temp){
MeraSet3 result = *this;
for(int i = 0; i < temp.number; i++) result.Remove(temp.items[i]);
return result;
}
MeraSet3(const MeraSet3 &temp){
this->number = temp.number;
this->items = new int[this->number];
for(int i = 0; i < this->number; i++) this->items[i] = temp.items[i];
}
};
Comments
Leave a comment