Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename tip>
- class kontejner
- {
- public:
- virtual kontejner~() {};
- virtual int br_elemenata() const = 0;
- virtual tip trenutni() const = 0;
- virtual bool prethodni() = 0;
- virtual bool sljedeci() = 0;
- virtual void pocetak() = 0;
- virtual void kraj() = 0;
- virtual void DodajIspred (const tip &) = 0;
- virtual void DodajIza (const tip &) = 0;
- virtual void obrisi() = 0;
- virtual tip operator[](int n) const = 0;
- virtual tip operator[] (int n) = 0;
- };
- template <typename tip>
- class niz : public kontejner<tip>
- {
- int kapacitet;
- int br_el;
- tip **elementi;
- int tekuci;
- public:
- niz() (): kapacitet(100), br_el(0), tekuci(0), elementi (new tip*[kapacitet]) {};
- ~niz();
- niz const(niz &);
- niz &operator = (const niz &);
- int br_elemenata () const;
- tip trenutni () const;
- bool prethodni();
- bool sljedeci();
- void pocetak();
- void kraj();
- void DodajIspred(const tip &);
- void DodajIza (const tip &);
- void obrisi();
- tip operator [] (int n) const;
- tip operator [] (int n);
- };
- template <typename tip>
- niz(tip)::~niz()
- {
- for (int i(0);i<br_el;i++)
- { delete elementi[i]
- delete [] elementi;
- }
- }
- template <typename tip>
- niz(tip)::niz(const niz &a) ; kapacitet(a.kapacitet), tekuci(a->tekuci), br_el(a.br_el), elementi(new tip*[kapacitet])
- {
- for (int i(0); i<a.br_el; i++) elementi[i] = new tip(a->elementi[i]);
- }
- template <typename tip>
- niz<tip>&niz<tip>::operator = (const niz &a)
- {
- if (this == a) return *this;
- if (kapacitet == a->kapacitet)
- {
- for (int i(0); i<br_el; i++ ) delete elementi[i];
- br_el = a->br_el;
- for (int i(0); i<br_el; i++) elementi[i] = new tip(a->elementi[i]);
- return *this;
- }
- else
- {
- for (int i(0); i<br_el; i++) delete elementi[i];
- delete [] elementi;
- kapacitet = a->kapacitet;
- br_el = a->br_el;
- elementi = new tip*[kapacitet];
- for (int i(0); i<br_el; i++) elementi[i] = a->elementi[i];
- }
- tekuci = a->tekuci;
- return *this;
- }
- template<typename tip>
- int niz<tip>::br_elemenata () const
- {
- return br_el;
- }
- template <typename tip>
- tip niz<tip>::trenutni () const
- {
- if (br_el == 0) throw "Niz prazan";
- return *elementi[tekuci-1];
- }
- template <typename tip>
- bool niz<tip>::prethodni ()
- {
- if (tekuci == 1) return false;
- tekuci--;
- return true;
- }
- template <typename tip>
- bool niz<tip>::sljedeci ()
- {
- if (tekuci == br_el) return false;
- tekuci++;
- return true;
- }
- template <typename tip>
- void niz<tip>::pocetak ()
- {
- tekuci = 1;
- }
- template <typename tip>
- void niz<tip>::kraj ()
- {
- tekuci = br_el;
- }
- template <typename tip>
- void niz<tip>::DodajIspred(const tip &a)
- {
- if (br_el == 0)
- {
- elementi[br_el++] = new tip(a);
- tekuci = 1;
- return;
- }
- if (br_el<kapacitet)
- {
- for (int i(br_el); i>=tekuci; i--) elementi[i] = elementi[i-1];
- elementi[tekuci] = new tip(a);
- br_el++;
- }
- else
- {
- kapacitet+=100;
- tip **kopija (new tip*[kapacitet]);
- for (int i(0); i<br_el; i++) kopija[i] = new tip(*elementi[i]);
- for (int i(0); i<br_el; i++) delete elementi[i];
- delete []elementi;
- elementi = kopija;
- for (int i(br_el); i>=tekuci; i--) elementi[i] = elementi[i-1];
- elementi[tekuci++] = new tip(a);
- br_el++;
- }
- }
- template<typename tip>
- void niz<tip>::DodajIza(const tip &a)
- {
- if (br_el==0)
- {
- elementi[br_el++] = new tip (a);
- tekuci = 1;
- return;
- }
- if (br_el<kapacitet)
- {
- for (int i(br_el); i>tekuci; i--) elementi[i] = elementi[i-1];
- elementi[tekuci] = new tip(a);
- br_el++;
- }
- else
- {
- kapacitet+=100;
- Info **kopija (new tip*[kapacitet]);
- for (int i(0); i<br_el; i++) kopija[i] = new tip(*elementi[i]);
- for (int i(0); i<br_el; i++) delete elementi[i];
- delete []elementi;
- elementi = kopija;
- for (int i(br_el); i>tekuci; i--) elementi[i] = elementi[i-1];
- elementi[tekuci++] = new tip(a);
- br_el++;
- }
- }
- template <typename tip>
- void niz<tip>::obrisi ()
- {
- if (br_el == 0) throw "Prazno!";
- for (int i(tekuci-1); i<br_el; i++) elementi[i]=elementi[i+1];
- delete elementi[--br_el];
- if (tekuci!=1) tekuci--;
- }
- template <typename tip>
- tip niz<tip>::operator[] (int n) const
- {
- if (n<0 || n >= br_el ) throw "Nepostojeci clan!";
- return *elementi[n];
- }
- template <typename tip>
- tip niz<tip>::operator[] (int n)
- {
- if (n<0 || n >= br_el ) throw "Nepostojeci clan!";
- return *elementi[n];
- }
Add Comment
Please, Sign In to add comment