Guest User

Untitled

a guest
Dec 9th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename tip>
  6. class kontejner
  7. {
  8. public:
  9. virtual kontejner~() {};
  10. virtual int br_elemenata() const = 0;
  11. virtual tip trenutni() const = 0;
  12. virtual bool prethodni() = 0;
  13. virtual bool sljedeci() = 0;
  14. virtual void pocetak() = 0;
  15. virtual void kraj() = 0;
  16. virtual void DodajIspred (const tip &) = 0;
  17. virtual void DodajIza (const tip &) = 0;
  18. virtual void obrisi() = 0;
  19. virtual tip operator[](int n) const = 0;
  20. virtual tip operator[] (int n) = 0;
  21. };
  22.  
  23. template <typename tip>
  24. class niz : public kontejner<tip>
  25. {
  26. int kapacitet;
  27. int br_el;
  28. tip **elementi;
  29. int tekuci;
  30. public:
  31. niz() (): kapacitet(100), br_el(0), tekuci(0), elementi (new tip*[kapacitet]) {};
  32. ~niz();
  33. niz const(niz &);
  34. niz &operator = (const niz &);
  35. int br_elemenata () const;
  36. tip trenutni () const;
  37. bool prethodni();
  38. bool sljedeci();
  39. void pocetak();
  40. void kraj();
  41. void DodajIspred(const tip &);
  42. void DodajIza (const tip &);
  43. void obrisi();
  44. tip operator [] (int n) const;
  45. tip operator [] (int n);
  46. };
  47.  
  48.  
  49. template <typename tip>
  50. niz(tip)::~niz()
  51. {
  52. for (int i(0);i<br_el;i++)
  53. { delete elementi[i]
  54. delete [] elementi;
  55. }
  56. }
  57.  
  58. template <typename tip>
  59. niz(tip)::niz(const niz &a) ; kapacitet(a.kapacitet), tekuci(a->tekuci), br_el(a.br_el), elementi(new tip*[kapacitet])
  60. {
  61. for (int i(0); i<a.br_el; i++) elementi[i] = new tip(a->elementi[i]);
  62. }
  63.  
  64. template <typename tip>
  65. niz<tip>&niz<tip>::operator = (const niz &a)
  66. {
  67. if (this == a) return *this;
  68. if (kapacitet == a->kapacitet)
  69. {
  70. for (int i(0); i<br_el; i++ ) delete elementi[i];
  71. br_el = a->br_el;
  72. for (int i(0); i<br_el; i++) elementi[i] = new tip(a->elementi[i]);
  73. return *this;
  74. }
  75. else
  76. {
  77. for (int i(0); i<br_el; i++) delete elementi[i];
  78. delete [] elementi;
  79. kapacitet = a->kapacitet;
  80. br_el = a->br_el;
  81. elementi = new tip*[kapacitet];
  82. for (int i(0); i<br_el; i++) elementi[i] = a->elementi[i];
  83. }
  84. tekuci = a->tekuci;
  85. return *this;
  86. }
  87.  
  88. template<typename tip>
  89. int niz<tip>::br_elemenata () const
  90. {
  91. return br_el;
  92. }
  93.  
  94. template <typename tip>
  95. tip niz<tip>::trenutni () const
  96. {
  97. if (br_el == 0) throw "Niz prazan";
  98. return *elementi[tekuci-1];
  99. }
  100.  
  101. template <typename tip>
  102. bool niz<tip>::prethodni ()
  103. {
  104. if (tekuci == 1) return false;
  105. tekuci--;
  106. return true;
  107. }
  108.  
  109. template <typename tip>
  110. bool niz<tip>::sljedeci ()
  111. {
  112. if (tekuci == br_el) return false;
  113. tekuci++;
  114. return true;
  115. }
  116.  
  117. template <typename tip>
  118. void niz<tip>::pocetak ()
  119. {
  120. tekuci = 1;
  121. }
  122.  
  123.  
  124. template <typename tip>
  125. void niz<tip>::kraj ()
  126. {
  127. tekuci = br_el;
  128. }
  129.  
  130.  
  131. template <typename tip>
  132. void niz<tip>::DodajIspred(const tip &a)
  133. {
  134. if (br_el == 0)
  135. {
  136. elementi[br_el++] = new tip(a);
  137. tekuci = 1;
  138. return;
  139. }
  140. if (br_el<kapacitet)
  141. {
  142. for (int i(br_el); i>=tekuci; i--) elementi[i] = elementi[i-1];
  143. elementi[tekuci] = new tip(a);
  144. br_el++;
  145. }
  146. else
  147. {
  148. kapacitet+=100;
  149. tip **kopija (new tip*[kapacitet]);
  150. for (int i(0); i<br_el; i++) kopija[i] = new tip(*elementi[i]);
  151. for (int i(0); i<br_el; i++) delete elementi[i];
  152. delete []elementi;
  153. elementi = kopija;
  154. for (int i(br_el); i>=tekuci; i--) elementi[i] = elementi[i-1];
  155. elementi[tekuci++] = new tip(a);
  156. br_el++;
  157. }
  158. }
  159.  
  160. template<typename tip>
  161. void niz<tip>::DodajIza(const tip &a)
  162. {
  163. if (br_el==0)
  164. {
  165. elementi[br_el++] = new tip (a);
  166. tekuci = 1;
  167. return;
  168. }
  169. if (br_el<kapacitet)
  170. {
  171. for (int i(br_el); i>tekuci; i--) elementi[i] = elementi[i-1];
  172. elementi[tekuci] = new tip(a);
  173. br_el++;
  174. }
  175. else
  176. {
  177. kapacitet+=100;
  178. Info **kopija (new tip*[kapacitet]);
  179. for (int i(0); i<br_el; i++) kopija[i] = new tip(*elementi[i]);
  180. for (int i(0); i<br_el; i++) delete elementi[i];
  181. delete []elementi;
  182. elementi = kopija;
  183. for (int i(br_el); i>tekuci; i--) elementi[i] = elementi[i-1];
  184. elementi[tekuci++] = new tip(a);
  185. br_el++;
  186. }
  187. }
  188.  
  189.  
  190. template <typename tip>
  191. void niz<tip>::obrisi ()
  192. {
  193. if (br_el == 0) throw "Prazno!";
  194. for (int i(tekuci-1); i<br_el; i++) elementi[i]=elementi[i+1];
  195. delete elementi[--br_el];
  196. if (tekuci!=1) tekuci--;
  197. }
  198.  
  199.  
  200. template <typename tip>
  201. tip niz<tip>::operator[] (int n) const
  202. {
  203. if (n<0 || n >= br_el ) throw "Nepostojeci clan!";
  204. return *elementi[n];
  205. }
  206.  
  207.  
  208. template <typename tip>
  209. tip niz<tip>::operator[] (int n)
  210. {
  211. if (n<0 || n >= br_el ) throw "Nepostojeci clan!";
  212. return *elementi[n];
  213. }
Add Comment
Please, Sign In to add comment