Guest User

Untitled

a guest
Nov 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. class Vector{
  9. unsigned sz;
  10. T* data;
  11. public:
  12. Vector():sz(0),data(new T[0]){}
  13. Vector(Vector & v):sz(v.sz),data(new T[v.sz]){
  14. for(unsigned i=0; i<v.sz; ++i)
  15. data[i] = v.data[i];
  16. }
  17. Vector(unsigned s):sz(s),data(new T[s]){}
  18. Vector(unsigned s,T x):sz(s),data(new T[s]){
  19. for(unsigned i=0; i<s; ++i)
  20. data[i] = x;
  21. }
  22. ~Vector(){delete[] data;}
  23.  
  24. Vector & operator=(const Vector & v){
  25. if (&v!=this){
  26. sz = v.sz;
  27. data = new T[sz];
  28. for(unsigned i = 0; i < sz; ++i)
  29. data[i] = v.data[i];
  30. }
  31. return *this;
  32. }
  33.  
  34. T* begin()const{
  35. return data;
  36. }
  37.  
  38. T* end()const{
  39. return data+sz;
  40. }
  41.  
  42. class Iterator{
  43. T* curr;
  44. friend Vector;
  45. public:
  46. Iterator():curr(0){}
  47. Iterator(const Vector & l):curr(l.begin()){}
  48. Iterator(T* n):curr(n){}
  49. Iterator(const Iterator & it): curr(it.curr){}
  50. Iterator & operator=(const Iterator & it){
  51. if (&it!=this){
  52. curr = it.curr;
  53. }
  54. return *this;
  55. }
  56.  
  57. Iterator & operator++(){
  58. ++curr;
  59. return *this;
  60. }
  61. Iterator & operator--(){
  62. --curr;
  63. return *this;
  64. }
  65.  
  66. Iterator & operator+(int k){
  67. curr+=k;
  68. return *this;
  69. }
  70.  
  71. Iterator & operator-(int k){
  72. curr-=k;
  73. return *this;
  74. }
  75.  
  76. bool operator==(const Iterator & it)const{
  77. return curr==it.curr;
  78. }
  79. bool operator==(T* n)const{
  80. return curr==n;
  81. }
  82. bool operator!=(const Iterator & it)const{
  83. return curr!=it.curr;
  84. }
  85. bool operator!=(T* n)const{
  86. return curr!=n;
  87. }
  88. T & operator*()const{return *curr;}
  89. void operator*(T d){*curr = d}
  90. T* current()const{return curr;}
  91. };
  92.  
  93. unsigned size()const{
  94. return sz;
  95. }
  96.  
  97. bool empty()const{
  98. return sz;
  99. }
  100.  
  101. T & operator[](unsigned i){
  102. if (i>=size || i<0){
  103. return NULL;
  104. }
  105. return data[i];
  106. }
  107.  
  108. T operator[](unsigned i)const{
  109. if (i>=size || i<0){
  110. return NULL;
  111. }
  112. return data[i];
  113. }
  114.  
  115. void push_back(T x){
  116. sz++;
  117. T* temp = new T[sz];
  118. for(unsigned i = 0; i < sz - 1; ++i)
  119. temp[i] = data[i];
  120. temp[sz-1] = x;
  121. delete data;
  122. data = temp;
  123. }
  124.  
  125. void pop_back(){
  126. if (sz == 0){
  127. return NULL;
  128. }
  129. sz--;
  130. T* temp = new T[sz];
  131. for(unsigned i = 0; i < sz; ++i)
  132. temp[i] = data[i];
  133. delete data;
  134. data = temp;
  135. }
  136.  
  137. void insert(unsigned pos, T x){
  138. if (pos<1 || pos>sz + 1){
  139. return NULL;
  140. }
  141. ++sz;
  142. T* temp = new T[sz];
  143. for(unsigned i = 0; i<pos-1; ++i)
  144. temp[i] = data[i];
  145. temp[pos - 1] = x;
  146. for(unsigned i = pos; i < sz; ++i)
  147. temp[i] = data[i-1];
  148. delete data;
  149. data = temp;
  150. }
  151.  
  152. void insert(Iterator it, T x){
  153. ++sz;
  154. T* temp = new T[sz];
  155. unsigned pos = 0;
  156. for(Vector::Iterator i = begin(); i!=it; ++i){
  157. temp[pos] = data[pos];
  158. ++pos;
  159. }
  160. temp[pos] = x;
  161. ++pos;
  162. for(Vector::Iterator i = it+1; i!=end(); ++i){
  163. temp[pos] = data[pos-1];
  164. ++pos;
  165. }
  166. delete data;
  167. data = temp;
  168. }
  169.  
  170. void erase(unsigned pos){
  171. if (pos<1 || pos>sz){
  172. return NULL;
  173. }
  174. sz--;
  175. T* temp = new T[sz];
  176. for(unsigned i = 0; i<pos-1; ++i)
  177. temp[i] = data[i];
  178. for(unsigned i = pos-1; i < sz; ++i)
  179. temp[i] = data[i+1];
  180. delete data;
  181. data = temp;
  182. }
  183.  
  184. void erase(Iterator it){
  185. sz--;
  186. T* temp = new T[sz];
  187. unsigned pos = 0;
  188. for(Vector::Iterator i = begin(); i!=it; ++i){
  189. temp[pos] = data[pos];
  190. ++pos;
  191. }
  192. for(Vector::Iterator i = it+1; i != end()+1; ++i){
  193. temp[pos] = data[pos+1];
  194. ++pos;
  195. }
  196. delete data;
  197. data = temp;
  198. }
  199.  
  200. void erase(unsigned pos1, unsigned pos2){
  201. if (pos1<1 || pos1>sz || pos2<1 || pos2>sz || pos1>=pos2){
  202. return NULL;
  203. }
  204. sz -= pos2-pos1;
  205. T* temp = new T[sz];
  206. for(unsigned i = 0; i<pos1-1; ++i)
  207. temp[i] = data[i];
  208. for(unsigned i = pos1-1; i < sz; ++i)
  209. temp[i] = data[i + pos2-pos1];
  210. delete data;
  211. data = temp;
  212. }
  213.  
  214. void erase(Iterator it1, Iterator it2){
  215. unsigned d = 0;
  216. for(Vector::Iterator i = it1; i != it2; ++i)
  217. ++d;
  218. sz -= d;
  219. unsigned pos = 0;
  220. T* temp = new T[sz];
  221. for(Vector::Iterator i = begin(); i!=it1; ++i){
  222. temp[pos] = data[pos];
  223. ++pos;
  224. }
  225. for(Vector::Iterator i = it2; i != end()+d; ++i){
  226. temp[pos] = data[pos+d];
  227. ++pos;
  228. }
  229. delete data;
  230. data = temp;
  231. }
  232.  
  233. void print(){
  234. for(unsigned i = 0; i < sz; ++i)
  235. cout << data[i] << ' ';
  236. cout << endl;
  237. }
  238.  
  239. };
Add Comment
Please, Sign In to add comment