• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

переделка кода в шаблон

MorganFaust

New member
17.04.2020
2
0
BIT
0
нужно переделать код в шаблон . шаблоны не изучил еще

C++:
#include <iostream>

class Set
{
private:
    unsigned int size;
    unsigned int* array;
public:
    Set() { size = 0; array = new unsigned int[size]; } // конструктор

    Set(int s) {
        size = s; array = new unsigned int[size]; // конструктор с аргументами
        for (unsigned i = 0; i < size; i++)
            array[i] = 0;
    }

    Set(const Set& ob) // конструктор копии
    {
        size = ob.size;
        array = new unsigned  int[size];
        for (unsigned int i = 0; i < size; i++)
            array[i] = ob.array[i];
    }

    ~Set() { delete[] array; }  // деструктор
    void Enter(); // ввод
    void Show(); // вывод
    void Union(Set, Set); // объединение
    void intersection(Set, Set); // пересечение
    void add(); // добавка элемента
    void extract(); // извлечение
    void check(); // проверка
    void operator = (Set); // перегрузки
    int operator [] (int i);
    void operator ->();
};

void Set::Enter()
{
    std::cout << "Введите размер " << std::endl;
    std::cin >> size;
    array = new unsigned int[size];
    for (unsigned int i = 0; i < size; i++)
    {
        std::cout << "Введите элемент " << i + 1 << ")   ";
        std::cin >> array[i];
    }
}

void Set::Show()
{
    std::cout << "Множество " << std::endl;
    for (unsigned int i = 0; i < size; i++)
        std::cout << array[i] << " ";
    std::cout << std::endl;
}

void Set::Union(Set a, Set b)
{
    this->size = a.size + b.size;
    this->array = new unsigned int[size];
    unsigned i, j, count = 0;
    unsigned int n = a.size;
    for (i = 0; i < a.size; i++)
        array[i] = a.array[i];

    for (i = 0; i < b.size; i++)
    {
        for (j = 0; j < a.size; j++)
            if (b.array[i] == a.array[j])
                continue;
            else
                count++;
        if (count == a.size)
            array[n++] = b.array[i];
        count = 0;
    }
    size = n;
}

void Set::intersection(Set a, Set b)
{
    size = a.size + b.size;
    array = new unsigned int[size];
    unsigned int i, j, n = 0;

    for (i = 0; i < a.size; i++)
        for (j = 0; j < b.size; j++)
        {
            if (a.array[i] == b.array[j])
            {
                array[n++] = a.array[i];
                continue;
            }
        }
    size = n;
}

void Set::add()
{
    int a[100];
    unsigned int i;
    int element;
    for (i = 0; i < size; i++)
        a[i] = array[i];
    delete[] array;
    size = size + 1;
    std::cout << "Введите новый элемент " << std::endl;
    std::cin >> element;
    a[i] = element;
    array = new unsigned int[size];
    for (i = 0; i < size; i++)
        array[i] = a[i];
}

void Set::extract()
{
    unsigned int number, n, i, j;
    n = size;
    std::cout << "Введите номер элемента от 0 до " << size - 1 << std::endl;
    std::cin >> number;

    if (number < 0 || number > size)
        std::cout << "Ошибка " << std::endl;
    else
    {
        for (i = 0; i < n; i++)
        {
            if (i == number)
            {
                for (j = i; j < n - 1; j++)
                    array[j] = array[j + 1];
                n--;
            }
        }
        size--;
    }
}

void Set::check()
{
    unsigned int element;
    std::cout << "Введите элемент для проверки " << std::endl;
    std::cin >> element;
    unsigned int i, count = 0;
    for (i = 0; i < size; i++)
        if (array[i] == element)
            std::cout << "Да такой элемент найден " << std::endl;
        else
            count++;
    if (count == size)
        std::cout << "Элемент не найден " << std::endl;
}

void Set :: operator->()
{
}

void Set::operator = (Set a)
{
    unsigned int i;
    delete[] this->array;

    this->size = a.size;
    this->array = new unsigned int[size];
    for (i = 0; i < size; i++)
        array[i] = a.array[i];
}

int Set::operator[](int i)
{
    return array[i];
}

int main()
{
    setlocale(0, "rus");
    Set a;
    std::cout << "Ввод и вывод 1 множества " << std::endl;
    a.Enter();
    a.Show();
    Set b = a;
    std::cout << "инициализация множества 2 с помощью конструктора копии " << std::endl;
    b.Show();
    std::cout << "Ввод множества 2 " << std::endl;
    b.Enter();
    Set c;
    std::cout << "Объединение множеств " << std::endl;
    c.Union(a, b);
    c.Show();
    Set d;
    d.intersection(a, b);
    std::cout << "Пересечение множеств" << std::endl;
    d.Show();
    std::cout << "Добавка элемента " << std::endl;
    d.add();
    d.Show();
    std::cout << "Проверка " << std::endl;
    d.check();
    d.Show();
    std::cout << "Извлечение " << std::endl;
    d.extract();
    d.Show();
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!