#ifndef _HEADER_H_ #define _HEADER_H_ template class DynamicArray { T *container; unsigned alloc_size; unsigned arr_size; void copy(const DynamicArray&); static T error; public: DynamicArray(); ~DynamicArray(); DynamicArray(const DynamicArray&); DynamicArray& operator=(const DynamicArray&); /// //////////////////////// T &at(unsigned int); void add(const T&); bool del(unsigned int); unsigned int size(); }; template T DynamicArray::error; template DynamicArray::DynamicArray() { arr_size = 0; alloc_size = 4; container = new T[alloc_size]; } template DynamicArray::~DynamicArray() { delete[] container; } template void DynamicArray::add(const T &d) { container[arr_size++] = d; if (arr_size >= alloc_size) { T *tmp = new T [(alloc_size *= 2)]; int cc = 0; while (cc < arr_size) tmp[cc] = container[cc++]; delete[] container; container = tmp; } } template void DynamicArray::copy(const DynamicArray& other) { alloc_size = other.alloc_size; arr_size = other.arr_size; container = new T[alloc_size]; for(int i = 0 ; i < arr_size ; i++) { container[i] = other.container[i]; } } template T& DynamicArray::at(unsigned index) { if (index > arr_size) return error; // FIXME return container[index]; } template unsigned int DynamicArray::size() { return arr_size; } template bool DynamicArray::del(unsigned int index) { if(index DynamicArray::DynamicArray(const DynamicArray& other) { copy(other); } template DynamicArray& DynamicArray::operator=(const DynamicArray& other) { if(this != &other) { delete[] container; copy(other); } return *this; } #endif