1 #ifndef ARRAY_H 2 #define ARRAY_H 3 4 #include <iterator> 5 #include <cstddef> 6 7 template<typename T> 8 class Array 9 { 10 public: 11 typedef T value_type; 12 typedef size_t size_type; 13 typedef ptrdiff_t difference_type; 14 typedef T &reference; 15 typedef const T &const_reference; 16 typedef T *pointer; 17 typedef const T *const_pointer; 18 typedef T *iterator; 19 typedef const T *const_iterator; 20 typedef std::reverse_iterator<iterator> reverse_iterator; 21 typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 22 23 private: 24 pointer m_p; 25 size_type m_size; 26 27 public: 28 29 Array(size_type size = 0) : m_p(size ? new value_type[size] : 0), m_size(size) {} 30 reset(size_t size)31 void reset(size_t size) 32 { 33 delete[] this->m_p; 34 this->m_p = size ? new value_type[size] : 0; 35 this->m_size = size; 36 } 37 size()38 size_type size() const { return(this->m_size); } 39 pointer()40 operator pointer() { return(this->m_p); } const_pointer()41 operator const_pointer() const { return(this->m_p); } 42 43 ///TODO: Add more functions from here: http://en.cppreference.com/w/cpp/container/array 44 }; 45 #endif 46