#include #include template class Vector { int vsize; // number of elements stored int asize; // size of the array Elem *array; // Invariant: vsize <= asize public: Vector() : vsize(0), asize(1), array(new Elem[asize]) {} Vector(const Vector & other) : vsize(other.vsize), asize(other.asize), array(new Elem(asize)) { for (int i = 0; i < vsize; i++) array[i] = other.array[i]; } Vector & operator=(const Vector & other) { if (&other != this) { vsize = other.vsize; if (asize < vsize) { delete[] array; asize = other.asize; array = new Elem[asize]; } for (int i = 0; i < vsize; i++) array[i] = other.array[i]; } return *this; } void fast_swap(Vector & other) { swap(vsize, other.vsize); swap(asize, other.asize); swap(array, other.array); } int size() const { return vsize; } Elem & operator[](int i) { return array[i]; } void push_back(Elem x) { if (vsize == asize) { asize *= 2; Elem *new_array = new Elem[asize]; for (int i = 0; i < vsize; i++) new_array[i] = array[i]; delete[] array; array = new_array; } array[vsize] = x; vsize++; } void pop_back() { vsize--; } typedef Elem *iterator; iterator begin() { return array; } iterator end() { return array + vsize; } }; template void swap(Vector & x, Vector & y) { x.fast_swap(y); } int main() { Vector v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); for (int i = 0; i < v.size(); i++) cout << v[i] << '\n'; for (Vector::iterator p = v.begin(); p != v.end(); ++p) cout << *p << '\n'; Vector v2 = v; v2 = v; return 0; }