#include #include class Set{ public: std :: vector c; Set( const std :: vector& other) { this->c = other; } Set() {} void deleteEl(int i) { for (int j = i + 1; j < c.size(); j++) { c[j-1] = c[j]; } this->c.pop_back(); } void Add(int64_t value) { for (int i = 1; i < c.size(); i++) { while (i < c.size() && c[i] == c[i-1]) { deleteEl(i); } } if(!this->Contains(value)) this->c.push_back(value); } void Remove(int64_t value) { for (int j = 1; j < c.size(); j++) { while (j < c.size() && c[j] == c[j-1]) { deleteEl(j); } } int i; for(i = 0; i < this->c.size(); i++) { if(this->c[i] == value) break; } if (i == this->c.size()) { return; } deleteEl(i); } bool Contains(int64_t value) const { int i; for(i = 0; i < this->c.size(); i++) { if(value == this->c[i]) return true; } return false; } Set Union(const Set& other) const { Set NewSet(this->c); bool flag = false; for(int i = 0; i < other.c.size(); i++) { flag = false; for (int j = 0; j < c.size() && !flag; j++) { if (other.c[i] == c[j]) { flag = true; } } if (!flag) { NewSet.c.push_back(other.c[i]); } } return NewSet; } Set Intersection(const Set& other) const { std :: vector NewVector; for(int i = 0; i < this->c.size(); i++){ for(int j = 0; j < other.c.size(); j++) if(this->c[i]==other.c[j]) NewVector.push_back(this->c[i]); } Set NewSet(NewVector); return NewSet; } Set Difference(const Set& other) const { std :: vector NewVector; bool flag = false; for(int i = 0; i < this->c.size(); i++){ flag = false; for(int j = 0; j < other.c.size() && !flag; j++) { if (other.c[j] == c[i]) { flag = true; } } if (!flag) { NewVector.push_back(c[i]); } } Set NewSet(NewVector); return NewSet; } Set SymmetricDifference(const Set& other) const { Set set1 = Difference(other); Set set2 = other.Difference(Set(c)); return set1.Union(set2); /* std :: vector NewVector; for(int i = 0; i < this->c.size(); i++){ for(int j = 0; j < other.c.size(); j++) if(this->c[i]!=other.c[j]) NewVector.push_back(this->c[i]); } for(int j = 0; j < other.c.size(); j++){ for(int i = 0; i < this->c.size(); i++) if(other.c[j] != this->c[i]) NewVector.push_back(other.c[j]); } Set NewSet(NewVector); return NewSet;*/ } std :: vector Data() const { std :: vector NewVector; NewVector = this->c; return NewVector; } };