Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Multime
- {
- Multime();
- Multime(const Multime & other);
- Multime(std::initializer_list<int> other);
- ~Multime();
- Multime& operator=(const Multime & other);
- void multime();
- Multime reuniune(const Multime & rhs) const;
- Multime intersectie(const Multime & rhs) const;
- Multime diferenta(const Multime & rhs) const;
- void insert(const int & value);
- int & operator[](size_t pos);
- const int & operator[](size_t pos) const;
- friend istream& operator<<(istream & file, Multime & obj);
- friend ostream& operator>>(ostream & file, Multime & obj);
- private:
- int n;
- int * a;
- };
- Multime::Multime()
- {
- n = 0;
- }
- Multime::~Multime()
- {
- if (a != nullptr)
- {
- delete[] a;
- }
- }
- Multime::Multime(const Multime & other)
- {
- n = other.n;
- a = new int[n];
- for (int i=0; i<n; ++i)
- {
- a[i] = other.a[i];
- }
- }
- Multime::Multime(std::initializer_list<int> other)
- {
- n = other.size();
- a = new int(n)
- int i=0;
- for (auto it=other.begin(); it!=other.end(); ++it, ++i)
- {
- a[i] = *it;
- }
- }
- Multime& Multime::operator=(const Multime & other)
- {
- if (a != nullptr)
- {
- delete[] a;
- }
- n = other.n;
- a = new int[n];
- for (int i=0; i<n; ++i)
- {
- a[i] = other.a[i];
- }
- return *this;
- }
- void Multime::multime()
- {
- for(int i=0; i<n; ++i)
- {
- for(int j=i+1; j<n; )
- {
- if(a[i] == a[j])
- {
- for(int k=j; k<n-1; ++k)
- {
- a[k] = a[k+1];
- }
- --n;
- }
- else
- {
- ++j;
- }
- }
- }
- for(int i=0; i<n-1; i++)
- {
- for(int j=i+1; j<n; j++)
- {
- if(a[i] > a[j])
- {
- swap(a[i], a[j]);
- }
- }
- }
- int * tmp = new int[n];
- for (int i=0; i<n; i++)
- {
- tmp[i] = a[i];
- }
- delete[] a;
- a = tmp;
- // cout << "\n";
- // for(int i=0; i<n; ++i)
- // {
- // cout<< a[i] <<" ";
- // }
- }
- Multime Multime::reuniune(const Multime & rhs) const
- {
- const Multime & lhs = *this;
- Multime answer;
- answer.n = lhs.n + rhs.n;
- answer.a = new int[answer.n];
- for (int i=0; i<lhs.n; ++i)
- {
- answer.a[i] = lhs.a[i];
- }
- for (int i=0; i<rhs.n; ++i)
- {
- answer.a[lhs.n+i] = rhs.a[i];
- }
- answer.multime();
- return answer;
- }
- Multime Multime::intersectie(const Multime & rhs) const
- {
- const Multime & lhs = *this;
- Multime answer;
- answer.n = max(lhs.n, rhs.n);
- answer.a = new int[answer.n];
- int i=0,j=0;
- answer.n = 0;
- while(i<lhs.n && j<rhs.n)
- {
- if(lhs.a[i] < rhs.a[j])
- {
- i++;
- }
- else if(rhs.a[i] < lhs.a[j])
- {
- j++;
- }
- else
- {
- answer.a[answer.n++] = rhs.a[j++];
- i++;
- }
- }
- int * tmp = new int[answer.n];
- for (int i=0; i<answer.n; ++i)
- {
- tmp[i] = answer.a[i];
- }
- delete[] answer.a;
- answer.a = tmp;
- return answer;
- }
- Multime Multime::diferenta(const Multime & rhs) const
- {
- const Multime & lhs = *this;
- Multime answer;
- answer.n = lhs.n;
- answer.a = new int[answer.n];
- answer.n = 0;
- int i,j;
- for (i=0; i<lhs.n; i++)
- {
- ok=0;
- j=0;
- while (j < rhs.n)
- {
- if(lhs.a[i] == rhs.a[j])
- {
- ok=1;
- }
- else
- {
- j++;
- }
- }
- if (ok == 0)
- {
- answer.a[answer.n++] = lhs.a[i];
- }
- }
- int * tmp = new int[answer.n];
- for (int i=0; i<answer.n; ++i)
- {
- tmp[i] = answer.a[i];
- }
- delete[] answer.a;
- answer.a = tmp;
- }
- void Multime::insert(int value)
- {
- int * tmp = new int[n+1];
- for (int i=0; i<n; ++i)
- {
- tmp[i] = a[i];
- }
- tmp[n++] = value;
- delete[] a;
- a = tmp;
- }
- int & Multime::operator[](size_t pos)
- {
- return a[i];
- }
- const int & Multime::operator[](size_t pos) const
- {
- return a[i];
- }
- istream& operator<<(istream & file, Multime & obj)
- {
- cin>>obj.n;
- if (obj.a != nullptr)
- {
- delete[] obj.a;
- }
- obj.a = new int[obj.n];
- for(int i=0; i<obj.n; i++)
- {
- cin >> obj.a[i];
- }
- return file;
- }
- ostream& operator<<(ostream & file, Multime & obj)
- {
- file << obj.n << ": ";
- for(int i=0; i<obj.n; i++)
- {
- cout << obj.a[i];
- }
- return file;
- int main()
- {
- Multime a, b;
- cin >> a;
- cin >> b;
- Multime reuniune = a.reuniune(b):
- Multime intersectie = a.intersectie(b);
- Multime diferenta = a.diferenta(b);
- cout << reuniune << endl;
- cout << intersectie << endl;
- cout << diferenta << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement