Добор (Александр Литвинов)

Задание содержит заготовки (задание, решенное без них, не принимается)

Задание

Создать класс IntegerSet, который представляет собой множество целых значений. Значения сохраняются в массиве, размер которого увеличивается по необходимости. Поля класса: 

  • Указатель на динамически созданный массив целых чисел: int *elements; 
  • Целое число – емкость множества, в котором хранится текущий размер массива. Оно изменяется, если размер массива – недостаточный для добавления новых элементов; 
  • Целое число – количество элементов множества; 

Класс должен содержать методы 

  • Конструктор по умолчанию, который инициализирует массив из десяти элементов, изменяет параметр емкости множества и устанавливает значения элементов массива в ноль. 
  • Копирующий конструктор, который устанавливает размер массива элементов текущего элемента равным размеру массива копируемого объекта, копирует все значения массива, а также копирует значения ёмкости и количества элементов. 
  • Перегруженный оператор присвоения, который устанавливает размер массива элементов текущего элемента равным размеру массива объекта в правой части, копирует все значения массива, а также копирует значения ёмкости и количества элементов и возвращает указатель на текущий элемент. 
  • Деструктор, удаляющий массив. 
  • Метод size(), возвращающий количество элементов 
  • Метод isEmpty(), который возвращает истину, если множество не содержит ни одного элемента. 
  • Метод contains(int), который принимает целый параметр и возвращает истину, если значение содержится в IntegerSet. 
  • Метод add(int), который принимает целый параметр и добавляет его в множество (если оно ещё не содержится в нём). Если массив уже полностью заполнен, тогда следует создать новый массив целых чисел вдвое большего размера, чем текущий массив, скопировать в него все значения, удалить старый массив и направить указатель elements на новый массив 
  • Метод remove(int), который принимает целое значение и удаляет его из множества (если оно там есть), при этом количество элементов уменьшается на единицу и последующие элементы массива сдвигаются влево 
  • Метод getAsVector(), который возвращает вектор целых чисел. Содержащий все значения в множестве. Порядок не имеет значения. 

Перегрузить операторы 

  • Перегруженный оператор ‘+’, который возвращает новое множество – объединение двух множеств 
  • Перегруженный оператор ‘*’, который возвращает новое множество – пересечение двух множеств 
  • Перегруженный оператор ‘/’, который возвращает новое множество – симметричную разность двух множеств

Заготовка состоит из файла IntegerSet.h и файла Source.cpp. Ни один, ни второй файл не должны быть изменены. Вся реализация методов должна быть сделана в файле IntegerSet.cpp. Примерный вывод правильно работающей программы такой:

Hello. This is an IntegerSet demo.
Program creates IntegerSet.

Test for the add() method: Program fills the Integer Set with 50 random numbers in the range of 0 through 19.

Test for the getAsVector() method: program generates the vector to display it.

11 6 3 14 5 10 17 4 16 9 12 2 15 8 1 18 13 19
Size of generated vector equals         18
Size of mySet1 equals                   18
size() of vector and size() of IntegerSet give the same result. It doesn't exceed 20, numbers are unique

--------------------------------------------------
remove() demo: odd numbers are removed from mySet1
now mySet1 contains odd numbers only
6 14 10 4 16 12 2 8 18

--------------------------------------------------
Assignment demo: auto mySet2 = mySet1;
mySet2 elements are:
6 14 10 4 16 12 2 8 18

--------------------------------------------------
Copy constructor demo: IntegerSet mySet3(mySet1);
mySet3 elements are:
6 14 10 4 16 12 2 8 18

--------------------------------------------------

Overloaded operators demo for the same operands:
operands are:

mySet1:
6 14 10 4 16 12 2 8 18

Sum (+) demo for mySet1 + mySet1
6 14 10 4 16 12 2 8 18

 intersection (*) Demo for mySet1 * mySet1
6 14 10 4 16 12 2 8 18

 Symmetric difference (/) Demo  for mySet1 / mySet1
result is an empty IntegerSet (1 for true, 0 for false): 1


--------------------------------------------------

Overloaded operators demo for the different operands:
operands are:

mySet1:
6 14 10 4 16 12 2 8 18
mySet4:
10 16 8 18 1 12 4 7 9 3 6 2 15 19 5 17 14 11 13 0

Sum (+) demo for mySet1 + mySet4
6 14 10 4 16 12 2 8 18 1 7 9 3 15 19 5 17 11 13 0

 intersection (*) Demo for mySet1 * mySet4
6 14 10 4 16 12 2 8 18

 Symmetric difference (/) Demo  for mySet1 / mySet4
1 7 9 3 15 19 5 17 11 13 0
result is an empty IntegerSet (1 for true, 0 for false): 0
Press any key to continue . . .