// File: Array.cpp // Array Template Class Implementation #include #include "Array.h" using namespace std; // default constructor template Array::Array(int n) { assert(n > 0); items = n; elements = new eltType [n]; assert(elements); } // constructor initializes elements to given value template Array::Array(int n, const eltType &val) { assert(n > 0); items = n; elements = new eltType [n]; assert(elements); for (int i = 0; i < n; ++i) { elements[i] = val; } } // constructor initializes from a standard array template Array::Array(const eltType A[], int n) { assert(n > 0); items = n; elements = new eltType [n]; assert(elements); for (int i = 0; i < n; ++i) { elements[i] = A[i]; } } // copy constructor template Array::Array(const Array &A) { items = A.size(); elements = new eltType [A.size()]; assert(elements); for (int i = 0; i < A.size(); ++i) elements[i] = A[i]; } // destructor template Array::~Array() { delete [] elements; } // Append element to array template Array &Array::operator+=(eltType elt) { eltType *replace=new eltType[items+1]; for (int i = 0; i < size(); ++i) replace[i]=elements[i]; replace[items++]=elt; delete [] elements; elements=replace; return(*this); } // assignment template Array& Array::operator=(const Array &A) { if (this != &A) { if (size() != A.size()) { delete [] elements; items = A.size(); elements = new eltType [A.size()]; assert(elements); } for (int i = 0; i < A.size(); ++i) elements[i] = A[i]; } return *this; } // inspector of the value of an individual element template const eltType& Array::operator[](int i) const { assert((i >= 0) && (i < size())); return elements[i]; } // inspector/mutator facilitator of individual element template eltType& Array::operator[](int i) { assert((i >= 0) && (i < size())); return elements[i]; } // template insertion operator for Array template ostream& operator<<(ostream &sout, const Array &A){ sout << "[ "; for (int i = 0; i < A.size(); ++i) sout << A[i] << " "; sout << "]"; return sout; } // Must make instance of each usage in order to be able to link using namespace std; template class Array; template class Array; template class Array; template ostream& operator<<(ostream &sout, const Array &A); template ostream& operator<<(ostream &sout, const Array &A); template ostream& operator<<(ostream &sout, const Array &A);