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