class Set {
public:
Set() {}
explicit Set(const std::vector<int64_t>& vector) : myset(vector) {}
Set Union(const Set& b) const {
std::vector<int64_t> c = myset;
for (int i = 0; i < b.myset.size(); i++) {
if (std::find(c.begin(), c.end(), b.myset[i]) == c.end())
c.push_back(b.myset[i]);
}
return Set(c);
}
Set Intersection(const Set& b) const {
std::vector<int64_t> c;
for (int i = 0; i < myset.size(); i++) {
for (int j = 0; j < b.myset.size(); j++) {
if (myset[i] == b.myset[j]) {
c.push_back(b.myset[j]);
}
}
}
return Set(c);
}
Set Difference(const Set& b) const {
std::vector<int64_t> c = myset;
for (int i = 0; i < b.myset.size(); i++) {
auto it = std::find(c.begin(), c.end(), b.myset[i]);
if (it != c.end())
c.erase(it);
}
return Set(c);
}
Set SymmetricDifference(const Set& b) const {
std::vector<int64_t> c = this->Union(b).myset;
std::vector<int64_t> c_ = this->Intersection(b).myset;
for (int i = 0; i < c_.size(); i++) {
auto it = std::remove(c.begin(), c.end(), c_[i]);
c.erase(it);
}
return Set(c);
}
void Add(int64_t num) {
myset.push_back(num);
}
void Remove(int64_t num) {
auto it = std::remove(myset.begin(), myset.end(), num);
myset.erase(it);
}
bool Contains(int64_t num) const {
if (std::find(myset.begin(), myset.end(), num) == myset.end())
return false;
else
return true;
}
std::vector<int64_t> Data() const {
return myset;
}
private:
std::vector<int64_t> myset;
};