Advertisement
neogz

template kolekcija

Feb 9th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.95 KB | None | 0 0
  1. /*
  2. template<class T1, class T2>
  3. class Kolekcija{
  4. T1 * _elementi1;
  5. T2 * _elementi2;
  6. int _trenutnoElemenata;
  7. /*1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko
  8. prosiranje kolekcije prilikom dodavanja svakog novog elementa, te onemoguciti ponavljanje elemenata.
  9. 2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije i smanjuje velicinu niza.
  10. Ukoliko je potrebno, prilikom uklanjanja elementa izvrsiti dealokaciju. Prilikom uklanjanja elemenata ocuv
  11. ati redoslijed njihovog dodavanja.
  12. 3. operator+ :: vraca objekat tipa Kolekcija koji u sebi sadrzi sve elemente objekta koji je
  13. pozvao funkciju i objekta koji je proslijedjen kao parametar (takodjer tipa Kolekcija) , pri cemu se
  14. elementi unutar kreirane kolekcije ne smiju ponavljati (ne smiju postojati dva ista elementa) .*/
  15. };
  16. */
  17.  
  18. class Kolekcija{
  19.  
  20.     //potrebi su nam preklopljeni operatori
  21.     //  =   ==   <<     []
  22.  
  23.     //////////////////////////////////////////////////////////////////////////////////////
  24.  
  25.     T1 * _elementi1;
  26.     T2 * _elementi2;
  27.     int _trenutnoElemenata;
  28.  
  29.     //////////////////////////////////////////////////////////////////////////////////////
  30. public:
  31.     Kolekcija(){
  32.         _elementi1 = nullptr;
  33.         _elementi2 = nullptr;
  34.         _trenutnoElemenata = 0;
  35.     }
  36.     Kolekcija(const Kolekcija & obj){
  37.         _trenutnoElemenata = obj._trenutnoElemenata;
  38.  
  39.         _elementi1 = new T1[_trenutnoElemenata];
  40.         _elementi2 = new T2[_trenutnoElemenata];
  41.  
  42.         for (int i = 0; i < _trenutnoElemenata; i++){
  43.             _elementi1[i] = obj._elementi1[i];
  44.             _elementi2[i] = obj._elementi2[i];
  45.         }
  46.     }
  47.     ~Kolekcija(){
  48.             delete[]_elementi1;
  49.             delete[]_elementi2;
  50.  
  51.             _elementi1 = nullptr;
  52.             _elementi2 = nullptr;
  53.             _trenutnoElemenata = 0;
  54.     }
  55.  
  56.     //////////////////////////////////////////////////////////////////////////////////////
  57.     void addElement(T1 element1, T2 element2){
  58.         //1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko
  59.         //prosiranje kolekcije prilikom dodavanja svakog novog elementa, te onemoguciti ponavljanje elemenata.
  60.  
  61.         // provjera ima li elemenata u nizu
  62.         for (int i = 0; i < _trenutnoElemenata; i++){
  63.             // provjera nalaze li se elementi vec u nizu
  64.             if (_elementi1[i] == element1 || _elementi2[i] == element2){
  65.                 //nalaze baciti exception
  66.                 throw exception("Element se vec nalazi u nizu!");
  67.             }
  68.         }
  69.    
  70.     // elementi se ne nalaze u nizu dodaj
  71.         // kreiramo novi niz za 1 veci
  72.         T1 * temp1 = new T1[_trenutnoElemenata + 1];
  73.         T2 * temp2 = new T2[_trenutnoElemenata + 1];
  74.         // prebaciti sve elemente  
  75.         for (int i = 0; i < _trenutnoElemenata; i++){
  76.             temp1[i] = _elementi1[i];
  77.             temp2[i] = _elementi2[i];
  78.         }
  79.         // osloboditi stare nizove
  80.         delete[]_elementi1;
  81.         delete[]_elementi2;
  82.  
  83.         // usmjeriti stare nizove na nove vece nizove
  84.         _elementi1 = temp1;
  85.         _elementi2 = temp2;
  86.  
  87.         // dodati elemente u kolekciju
  88.         _elementi1[_trenutnoElemenata] =element1;
  89.         _elementi2[_trenutnoElemenata] =element2;
  90.        
  91.         //uvecati brojac
  92.         _trenutnoElemenata++;
  93.  
  94.     }
  95.     void removeElement(T1 element){
  96.         //2. RemoveElement::na osnovu parametra tipa T1 uklanja elemente iz kolekcije i smanjuje velicinu niza.
  97.         //  Ukoliko je potrebno, prilikom uklanjanja elementa izvrsiti dealokaciju.Prilikom uklanjanja elemenata ocuvati redoslijed njihovog dodavanja.
  98.         for (int i = 0; i < _trenutnoElemenata; i++){
  99.             // pretrazuje nalazi li se element u kolekciji
  100.             if (_elementi1[i] == element){
  101.                 // pronasao je element na poziciji i, ukloniti ga
  102.                 //delete _elementi1[i];
  103.                 //delete _elementi2[i];
  104.                 // uklonili smo element na toj poziciji, sada kopirati pok
  105.                 for (int j = i; j < _trenutnoElemenata-1; j++){
  106.                     _elementi1[j] = _elementi1[j + 1];
  107.                     _elementi2[j] = _elementi2[j + 1];
  108.                 }
  109.                 // uklonjen element i kopirani elementi da ne bude praznih mjesta u nizu
  110.                 // smanjiti trenutno
  111.                 _trenutnoElemenata--;
  112.                 // izaci iz funckije jer nema potrebe vise da pretrazujemo jer smo prilikom dodjele ogranicili da se elementi ne smije ponavljati
  113.                 return;
  114.        
  115.             }
  116.         }
  117.         // ukoliko se u for petlji nije pronasao elemnet baciti exception
  118.         throw exception("Element nije moguce ukloniti iz kolekcije, jer se element ne nalazi u kolekciji!");
  119.     }
  120.     Kolekcija  operator +(const Kolekcija & k){
  121.         //3. operator+ ::vraca objekat tipa Kolekcija koji u sebi sadrzi sve elemente objekta koji je
  122.         //  pozvao funkciju i objekta koji je proslijedjen kao parametar(takodjer tipa Kolekcija), pri cemu se
  123.         //  elementi unutar kreirane kolekcije ne smiju ponavljati(ne smiju postojati dva ista elementa)
  124.        
  125.         // pravimo kolekciju koja sadrzi elemente kolekcije koja je pozvala oeprator i kolekcije koja je u argumentu
  126.         Kolekcija temp;
  127.         // for petljom dodajemo elemente u temp kolekciju
  128.         // isti elementi se nece dodavati jer je to rijeseno u funkciji addElement
  129.         for (int i = 0; i < _trenutnoElemenata; i++){
  130.             temp.addElement(_elementi1[i], _elementi2[i]);
  131.         }
  132.         // dodajemo elemente iz kolekcije koja se nalazi u argumentu
  133.         for (int i = 0; i < k._trenutnoElemenata; i++){
  134.             temp.addElement(k._elementi1[i], k._elementi2[i]);
  135.         }
  136.         // dodano sve vrati
  137.         return temp;
  138.  
  139.         //// na 1 kolekciju dodati
  140.         //T1 * temp1 = new T1[(_trenutnoElemenata + k._trenutnoElemenata)];
  141.         //T2 * temp2 = new T2[(_trenutnoElemenata + k._trenutnoElemenata)];
  142.         //// kopiramo iz prvog niza
  143.         //for (int i = 0; i < _trenutnoElemenata; i++){
  144.         //  temp1[i] = _elementi1[i];
  145.         //  temp2[i] = _elementi2[i];
  146.         //}
  147.         //// kopiramo iz druog niza
  148.         //for (int i = _trenutnoElemenata; i < (_trenutnoElemenata + k._trenutnoElemenata); i++){
  149.         //  temp1[i] = k._elementi1[i];
  150.         //  temp2[i] = k._elementi2[i];
  151.         //}
  152.         //// brisemo stari niz
  153.         //delete[] _elementi1;
  154.         //delete[] _elementi2;
  155.         //
  156.         //_elementi1 = temp1;
  157.         //_elementi2 = temp2;
  158.  
  159.         //return *this;
  160.  
  161.     }
  162.     void info(){
  163.         cout << crt << "\tKOLEKCIJA\n" << crt;
  164.         for (int i = 0; i < _trenutnoElemenata; i++){
  165.             cout << _elementi1[i] << " - " << _elementi2[i] <<endl;
  166.         }
  167.         cout << crt;
  168.     }
  169.  
  170. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement