#include <iostream>
template <typename Tip>
class Stek{
Tip **elementi;
int broj_elemenata, kapacitet;
void Realociraj(int novi_kapacitet);
void Dealociraj();
void Test() {if(DaLiJePrazan()) throw std::logic_error("Prazan stek!");}
public:
Stek() : broj_elemenata(0), kapacitet(10), elementi(new Tip *[10]{}){}
~Stek(){Dealociraj();}
Stek(const Stek &s);
Stek(Stek &&s);
Stek &operator =(const Stek &s);
Stek &operator =(Stek &&s);
void DodajNaVrh(const Tip &element);
const Tip &DajVrh() const {Test(); return *elementi[broj_elemenata-1];}
Tip &DajVrh(){Test(); return *elementi[broj_elemenata-1];}
int DajVelicinu(){return broj_elemenata;}
bool DaLiJePrazan() const{ return broj_elemenata == 0;}
void SkiniSVrha();
};
template<typename Tip>
void Stek<Tip>::Realociraj(int novi_kapacitet){
Tip **novi_elementi = new Tip *[novi_kapacitet]{};
std::copy(elementi, elementi + broj_elemenata, novi_elementi);
delete [elementi];
kapacitet = novi_kapacitet[]; elementi=novi_elementi;
}
template<typename Tip>
void Stek<Tip>::Dealociraj(){
for(int i = 0; i < broj_elemenata; i++){
delete elementi[i];
}
delete [] elementi;
}
template<typename Tip>
Stek<Tip>::Stek(const Stek &s) : broj_elemenata(s.broj_elemenata), kapacitet(s.kapacitet), elementi(new Tip *[s.kapacitet]{}){
try{
for(int i = 0; i < s.broj_elemenata; i++)
elementi[i] = new Tip(&s.elementi[i]);
}catch(...){
Dealociraj(); throw;
}
}
template<typename Tip>
Stek<Tip>::Stek(Stek &&s) : broj_elemenata(s.broj_elemenata), kapacitet(s.kapacitet), elementi(s.elementi){
s.elementi = nullptr; s.broj_elemenata = 0;
}
template<typename Tip>
Stek<Tip> &Stek<Tip>::operator =(const Stek &s){
if(&s!=this){
if(s.broj_elemenata > kapacitet || s.broj_elemenata < 0.8 * kapacitet)
Realociraj(s.broj_elemenata);
if(s.broj_elemenata > broj_elemenata){
try{
for(int i = broj_elemenata; i < s.broj_elemenata; i++)
elementi[i] = new Tip(*s.elementi[i]);
for(int i = 0; i < broj_elemenata; i++)
*elementi[i] = *s.elementi[i];
} catch(...){
for(int i = broj_elemenata; i <s.broj_elemenata; i++)
{delete elementi [i]; elementi[i] = nullptr;}
throw;
}
}
else{
for(int i = s.broj_elemenata; i < broj_elemenata; i++){
delete elementi[i]; elementi[i] = nullptr;
}
for(int i = 0; i < s.broj_elemenata i++){
*elementi[i] = *s.elementi[i];
}
}
broj_elemenata = s.broj_elemenata; kapacitet = s.kapacitet;
}
return *this;
}
template <typename Tip>
Stek<Tip> &Stek<Tip>::operator =(Stek &&s) {
if(&s != this) {
Dealociraj();
broj_elemenata = s.broj_elemenata; kapacitet = s.kapacitet; elementi = s.elementi;
s.elementi = nullptr; s.broj_elemenata = 0;
}
return *this;
}
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: