#include using namespace std; template class DynArray { public: T *elements; int size; //DynArray a = b; //DynArray m14 (m1 = m5); DynArray (const DynArray& arr) { // *this - това сме ние elements = NULL; *this = arr; } DynArray& operator = (const DynArray& other) { //*this.assign (other) //*this = other; //this->elements = other.elements; СПОДЕЛЯНЕ НА ПАМЕТ!!! if (this->elements != NULL) delete this->elements; this->elements = new T [other.size]; for (int i =0; i < other.size; i++) this->elements[i] = other.elements[i]; this->size = other.size; return *this; } DynArray () { elements = 0; size = 0; } void add (T x) { T *save = elements; elements = new T [size+1]; //size*2 for (int i = 0; i < size; i++) elements[i] = save[i]; delete save; elements[size] = x; size++; } int indexOf (T x) { int i = 0; while (i < size && elements[i] != x) i++; if (i >= size) i = -1; return i; } void remove (T x) { int ix = indexOf (x); if (ix < 0) return; T *newarr = new T [size-1]; int i; for (i = 0; i < ix; i++) newarr[i] = elements[i]; for (i = ix+1; i < size; i++) newarr[i-1] = elements[i]; delete elements; size--; elements = newarr; } void print () { cout << "["; for (int i = 0; i < this->size; i++) { cout << " " << this->elements[i]; } cout << " ]"; } DynArray& operator += (const DynArray& tail) { //c = a += b; *this = *this + tail; return *this; } /* ... operator + (tail) DynArray res = *this; res += tail; return res; */ DynArray operator + (const DynArray& tail) { DynArray res; //a += b; a = a + b; /*int i; for (i = 0; i < this->size; i++) res.add(this->elements[i]); for (i = 0; i < tail.size; i++) res.add(tail.elements[i]);*/ //this->elements ++ tail.elements res.elements = new T [this->size + tail.size]; int i; for (i = 0; i < this->size; i++) res.elements[i] = this->elements[i]; for (i = 0; i < tail.size; i++) res.elements[i+this->size] = tail.elements[i]; res.size = this->size + tail.size; return res; } bool operator == (DynArray other) { if (this->size != other.size) return false; for (int i = 0; i < size; i++) if (this->elements[i] != other.elements[i]) return false; return true; } //*this <= other bool operator < (DynArray other) { for (int i = 0; i < this->size; i++) if (other.indexOf (this->elements[i]) == -1) return false; return true; } ~DynArray () { delete this->elements; } T dummy; T& operator [] (int i) { if (i < size && i >= 0) return this->elements[i]; return dummy; } //cout << arr; }; template void operator << (istream& out,DynArray arr) { for (int i =0; i < arr.size; i++) out << arr.elements[i]; } int main () { DynArray a; DynArray m1,m2; m1.add (1); m1.add (1); m1.add (1); m1.add (1); m2.add (2); m2.add (2); m2.add (2); m2.add (2); m2.add (4); m2.add (5); m2.add (6); cout << endl << "m1:"; m1.print(); cout << endl << "m2:"; m2.print(); //a = b = c = d; //a.op = (b.op = (c.op = (d))); m1 = m2; //m1.operator=(m2) cout << endl << "m1:"; m1.print(); m2.elements[0] = 70; cout << endl << "m2:"; m2.print(); cout << endl << "m1:"; m1.print(); DynArray m3 = m1; cout << endl << "m3:"; m3.print(); m3.elements[0] = 70; cout << endl << "m3:"; m3.print(); cout << endl << "m1:"; m1.print(); if (m1 < m2) cout << "m1 < m2"; else cout << "m1 >= m2"; m3.elements[0] = 12; cout << endl << "m1:"; m1.print(); cout << endl << "m2:"; m2.print(); cout << endl << "m3:"; m3.print(); m1 = m2 = m3; cout << endl << "m1:"; m1.print(); cout << endl << "m2:"; m2.print(); cout << endl << "m3:"; m3.print(); m3 = m1 + m2; DynArray m5 (m1 + m2); }