Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
3.39 Кб
Скачать
#include <iostream>
#include <vector>
#include <algorithm>
#include <windows.h>
using namespace std;

class IntSet {
private:
    vector<int> elements;
    
    void removeDuplicates() {
        sort(elements.begin(), elements.end());
        elements.erase(unique(elements.begin(), elements.end()), elements.end());
    }
    
public:
    IntSet(const vector<int>& elems = {}) : elements(elems) {
        removeDuplicates();
    }
    
    // Объединение множеств (+)
    IntSet operator+(const IntSet& other) const {
        vector<int> result = elements;
        result.insert(result.end(), other.elements.begin(), other.elements.end());
        return IntSet(result);
    }
    
    // Пересечение множеств (&)
    IntSet operator&(const IntSet& other) const {
        vector<int> result;
        for (int elem : elements) {
            if (find(other.elements.begin(), other.elements.end(), elem) != other.elements.end()) {
                result.push_back(elem);
            }
        }
        return IntSet(result);
    }
    
    // Разность множеств (-)
    IntSet operator-(const IntSet& other) const {
        vector<int> result;
        for (int elem : elements) {
            if (find(other.elements.begin(), other.elements.end(), elem) == other.elements.end()) {
                result.push_back(elem);
            }
        }
        return IntSet(result);
    }
    
    // Добавление элемента
    void add(int elem) {
        if (find(elements.begin(), elements.end(), elem) == elements.end()) {
            elements.push_back(elem);
            removeDuplicates();
        }
    }
    
    // Удаление элемента
    void remove(int elem) {
        auto it = find(elements.begin(), elements.end(), elem);
        if (it != elements.end()) {
            elements.erase(it);
        }
    }
    
    void print() const {
        cout << "{";
        for (int i = 0; i < elements.size(); i++) {
            cout << elements[i];
            if (i < elements.size() - 1) cout << ", ";
        }
        cout << "}" << endl;
    }
    
    friend ostream& operator<<(ostream& os, const IntSet& s);
};

ostream& operator<<(ostream& os, const IntSet& s) {
    os << "{";
    for (int i = 0; i < s.elements.size(); i++) {
        os << s.elements[i];
        if (i < s.elements.size() - 1) os << ", ";
    }
    os << "}";
    return os;
}

int main() {
    SetConsoleOutputCP(65001);
    
    cout << "=== Задача 3.9 - Множество целых чисел ===" << endl;
    
    IntSet s1({1, 2, 3, 4, 5});
    IntSet s2({4, 5, 6, 7, 8});
    
    cout << "Множество s1: " << s1 << endl;
    cout << "Множество s2: " << s2 << endl;
    
    IntSet unionSet = s1 + s2;
    cout << "s1 + s2 (объединение): " << unionSet << endl;
    
    IntSet intersection = s1 & s2;
    cout << "s1 & s2 (пересечение): " << intersection << endl;
    
    IntSet difference = s1 - s2;
    cout << "s1 - s2 (разность): " << difference << endl;
    
    s1.add(10);
    cout << "s1 после добавления 10: " << s1 << endl;
    
    s1.remove(3);
    cout << "s1 после удаления 3: " << s1 << endl;
    
    return 0;
}
Соседние файлы в папке Лаба3