#include #include class Set { public: std::vector v; explicit Set(const std::vector& v) { this->v = v; } std::vector Data() const { return this->v; } void Add(int64_t number) { bool is_new = true; for (int i = 0; i < this->v.size(); i++) if (number == this->v[i]) { is_new = false; break; } if (is_new) this->v.push_back(number); } void Remove(int64_t number) { for (int i = 0; i < this->v.size(); i++) if (this->v[i] == number) { this->v.erase(this->v.begin() + i); break; } } bool Contains(int64_t number) const { for (int i = 0; i < this->v.size(); i++) if (this->v[i] == number) return true; return false; } Set Union(const Set& other) const { auto this_set = Data(); auto other_set = other.Data(); int size_other = other_set.size(); int this_size = this_set.size(); std::vector new_v; bool is_new = true; for (int i = 0; i < this_size; i++) new_v.push_back(this_set[i]); for (int i = 0; i < size_other; i++) { is_new = true; for (int j = 0; j < this_size; j++) { if (other_set[i] == this_set[j]) { is_new = false; break; } } if (is_new == true) new_v.push_back(other_set[i]); } return Set(new_v); } Set Intersection(const Set& other) const { auto this_set = Data(); auto other_set = other.Data(); int size_other = other_set.size(); int this_size = this_set.size(); std::vector new_v; for (int i = 0; i < this_size; i++) { for (int j = 0; j < size_other; j++) { if (other_set[j] == this_set[i]) { new_v.push_back(this_set[i]); break; } } } return Set(new_v); } Set Difference(const Set& other) const { auto this_set = Data() > other.Data() ? Data() : other.Data(); auto other_set = Data() < other.Data() ? Data() : other.Data(); int size_other = other_set.size(); int this_size = this_set.size(); bool is_different = true; std::vector new_v; for (int i = 0; i < this_size; i++) { is_different = true; for (int j = 0; j < size_other; j++) { if (other_set[j] == this_set[i]) { is_different = false; break; } } if (is_different) new_v.push_back(this_set[i]); } return Set(new_v); } Set SymmetricDifference(const Set& other) const { auto this_set = Data(); auto other_set = other.Data(); int size_other = other_set.size(); int this_size = this_set.size(); bool is_different = true; std::vector new_v; for (int i = 0; i < this_size; i++) { if (!other.Contains(this_set[i])) new_v.push_back(this_set[i]); } for (int i = 0; i < size_other; i++) { if (!Contains(other_set[i])) new_v.push_back(other_set[i]); } return Set(new_v); } };