dburner

C++ List

Jan 16th, 2014
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1. #pragma once
  2.  
  3.  
  4. //using namespace std;
  5.  
  6. template <class T>
  7. class  Vector
  8. {
  9. public:
  10.  
  11.     typedef T * iterator;
  12.  
  13.     Vector();
  14.     Vector(unsigned int size);
  15.     Vector(unsigned int size, const T & initial);
  16.     Vector(const Vector<T> & v);      
  17.     ~Vector();
  18.  
  19.     unsigned int capacity() const;
  20.     unsigned int size    () const;
  21.     bool         empty   () const;
  22.  
  23.     iterator begin();
  24.     iterator end  ();
  25.  
  26.     T & front();
  27.     T & back ();
  28.  
  29.     void push_back(const T & value);
  30.     void pop_back ();  
  31.  
  32.     void reserve(unsigned int capacity);  
  33.     void resize (unsigned int size);  
  34.  
  35.     T & operator[](unsigned int index);  
  36.  
  37.     Vector<T> & operator=(const Vector<T> &);
  38.  
  39.     void clear();
  40. private:
  41.     unsigned int my_size;
  42.     unsigned int my_capacity;
  43.     T * buffer;
  44. };
  45.  
  46.  
  47. template<class T>
  48. Vector<T>::Vector()
  49. {
  50.     my_capacity = 0;
  51.     my_size     = 0;
  52.     buffer      = 0;
  53. }
  54.  
  55. template<class T>
  56. Vector<T>::Vector(const Vector<T> & v)
  57. {
  58.     my_size     = v.my_size;
  59.     my_capacity = v.my_capacity;
  60.     buffer      = new T[my_size];  
  61.  
  62.     for (unsigned int i = 0; i < my_size; i++)
  63.         buffer[i] = v.buffer[i];  
  64. }
  65.  
  66. template<class T>
  67. Vector<T>::Vector(unsigned int size)
  68. {
  69.     my_capacity = size;
  70.     my_size     = size;
  71.     buffer      = new T[size];
  72. }
  73.  
  74. template<class T>
  75. Vector<T>::Vector(unsigned int size, const T & initial)
  76. {
  77.     my_size     = size;
  78.     my_capacity = size;
  79.     buffer      = new T [size];
  80.     for (unsigned int i = 0; i < size; i++)
  81.         buffer[i] = initial;
  82.     //T();
  83. }
  84.  
  85. template<class T>
  86. Vector<T> & Vector<T>::operator = (const Vector<T> & v)
  87. {
  88.     delete[ ] buffer;
  89.     my_size = v.my_size;
  90.     my_capacity = v.my_capacity;
  91.     buffer = new T [my_size];
  92.     for (unsigned int i = 0; i < my_size; i++)
  93.         buffer[i] = v.buffer[i];
  94.     return *this;
  95. }
  96.  
  97. template<class T>
  98. typename Vector<T>::iterator Vector<T>::begin()
  99. {
  100.     return buffer;
  101. }
  102.  
  103. template<class T>
  104. typename Vector<T>::iterator Vector<T>::end()
  105. {
  106.     return buffer + size();
  107. }
  108.  
  109. template<class T>
  110. T& Vector<T>::front()
  111. {
  112.     return buffer[0];
  113. }
  114.  
  115. template<class T>
  116. T& Vector<T>::back()
  117. {
  118.     return buffer[size - 1];
  119. }
  120.  
  121. template<class T>
  122. void Vector<T>::push_back(const T & v)
  123. {
  124.     if (my_size >= my_capacity)
  125.         reserve(my_capacity + 5);
  126.  
  127.     buffer [my_size++] = v;
  128. }
  129.  
  130. template<class T>
  131. void Vector<T>::pop_back()
  132. {
  133.     my_size--;
  134. }
  135.  
  136. template<class T>
  137. void Vector<T>::reserve(unsigned int capacity)
  138. {
  139.     if(buffer == 0)
  140.     {
  141.         my_size     = 0;
  142.         my_capacity = 0;
  143.     }
  144.  
  145.     T * Newbuffer = new T [capacity];
  146.     //assert(Newbuffer);
  147.     unsigned int l_Size = capacity < my_size ? capacity : my_size;
  148.     //copy (buffer, buffer + l_Size, Newbuffer);
  149.  
  150.     for (unsigned int i = 0; i < l_Size; i++)
  151.         Newbuffer[i] = buffer[i];
  152.  
  153.     my_capacity = capacity;
  154.     delete[] buffer;
  155.     buffer = Newbuffer;
  156. }
  157.  
  158. template<class T>
  159. unsigned int Vector<T>::size()const//
  160. {
  161.     return my_size;
  162. }
  163.  
  164. template<class T>
  165. void Vector<T>::resize(unsigned int size)
  166. {
  167.     reserve(size);
  168.     my_size = size;
  169. }
  170.  
  171. template<class T>
  172. T& Vector<T>::operator[](unsigned int index)
  173. {
  174.     return buffer[index];
  175. }  
  176.  
  177. template<class T>
  178. unsigned int Vector<T>::capacity()const
  179. {
  180.     return my_capacity;
  181. }
  182.  
  183. template<class T>
  184. Vector<T>::~Vector()
  185. {
  186.     delete[] buffer;
  187. }
  188.  
  189. template <class T>
  190. void Vector<T>::clear()
  191. {
  192.     my_capacity = 0;
  193.     my_size = 0;
  194.     buffer = 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment