#ifndef _LVPVECTOR_H_ #define _LVPVECTOR_H_ #include #define explicit template class vector { public: // constructors/destructor vector() : mySize(0), myList(0) { } explicit vector(int size) : mySize(size), myList(new itemType[size]) { } vector(int size, const itemType & fillValue) : mySize(size), myList(new itemType[size]) { int k; for(k = 0; k < size; k++) { myList[k] = fillValue; } } vector(const vector & vec) : mySize(vec.length()), myList(new itemType[mySize]) { int k; // copy elements for(k = 0; k < mySize; k++){ myList[k] = vec.myList[k]; } } ~vector () { delete [] myList; } // assignment const vector & operator = (const vector & rhs) { if (this != &rhs) // don't assign to self! { delete [] myList; // get rid of old storage mySize = rhs.length(); myList = new itemType [mySize]; // allocate new storage // copy rhs int k; for(k=0; k < mySize; k++) { myList[k] = rhs.myList[k]; } } return *this; // permit a = b = c = d } // accessors int length() const { return mySize; } // indexing itemType & operator [] (int k) { if (k < 0 || mySize <= k) { cerr << "Illegal vector index: " << k << " max index = "; cerr << (mySize-1) << endl; exit(1); } return myList[k]; } const itemType & operator [] (int k) const { if (k < 0 || mySize <= k) { cerr << "Illegal vector index: " << k << " max index = "; cerr << (mySize-1) << endl; exit(1); } return myList[k]; } // modifiers void resize(int newSize) { int k; int numToCopy = newSize < mySize ? newSize : mySize; // allocate new storage and copy element into new storage itemType * newList = new itemType[newSize]; for(k=0; k < numToCopy; k++) { newList[k] = myList[k]; } delete [] myList; // de-allocate old storage mySize = newSize; // assign new storage/size myList = newList; } private: int mySize; // # elements in array itemType * myList; // array used for storage }; #endif