#include <iostream>
#include <stdexcept>
#include <initializer_list>
#include <utility>
template <typename TipElemenata>
class Vektor {
TipElemenata *elementi;
int velicina;
public:
Vektor(int velicina = 0, TipElemenata inicijalno = TipElemenata()) :
elementi(new TipElemenata[velicina]), velicina(velicina){
for(int i = 0; i < velicina; i++){
elementi[i] = inicijalno;
}
}
~Vektor(){
delete [] elementi;
};
Vektor(const Vektor &v) : elementi(new TipElemenata[v.velicina]), velicina(v.velicina){
for(int i = 0; i < velicina; i++)
elementi[i] = v.elementi[i];
}
Vektor(Vektor &&v) : elementi(v.elementi), velicina(v.velicina){
v.elementi = nullptr;
v.velicina = 0;
}
Vektor &operator =(Vektor v){
std::swap(elementi, v.elementi);
std::swap(velicina, v.velicina);
return *this;
}
Vektor(std::initializer_list<TipElemenata> l) :
elementi(new TipElemenata[l.size()]), velicina(int(l.size())){
int i = 0;
for(auto x : l){
elementi[i] = x;
i++;
}
}
int DajVelicinu() const { return velicina;}
void PromijeniVelicinu(int nova_velicina, TipElemenata popuna = TipElemenata()){
if(nova_velicina < 0) throw std::domain_error("Neispravna velicina");
if(velicina == nova_velicina) return;
if(nova_velicina >= velicina * 0.8 && nova_velicina < velicina)
{velicina = nova_velicina; return;}
TipElemenata *novi = new TipElemenata[nova_velicina];
if(nova_velicina > velicina){
for(int i = 0; i < velicina; i++) novi[i] = elementi[i];
for(int i = velicina; i < nova_velicina; i++)novi[i] = popuna;
}
else{
for(int i = 0; i < nova_velicina; i++) novi[i] = elementi[i];
}
auto pomocni = elementi;
elementi = novi;
velicina = nova_velicina;
delete [] pomocni;
}
void DodajNaKraj(const TipElemenata &e){
PromijeniVelicinu(velicina + 1, e);
}
TipElemenata operator[](int i) const{
if(i < 0 || i >= velicina) throw std::range_error("Nedozvoljen indeks");
return elementi[i];
}
TipElemenata &operator[](int i){
if(i < 0 || i >= velicina) throw std::range_error("Nedozvoljen indeks");
return elementi[i];
}
TipElemenata *begin() const{ return elementi;}
TipElemenata *end() const { return elementi + velicina;}
};
int main() {
Vektor<int> v(5, 3);
std::cout << "Pocetni vektor: ";
for(auto x : v) std::cout << x << " ";
std::cout << "\nVelicina: " << v.DajVelicinu() << std::endl;
v[2] = 10;
std::cout << "Nakon v[2] = 10: ";
for(auto x : v) std::cout << x << " ";
std::cout << std::endl;
v.DodajNaKraj(99);
std::cout << "Nakon DodajNaKraj(99): ";
for(auto x : v) std::cout << x << " ";
std::cout << "\nVelicina: " << v.DajVelicinu() << std::endl;
v.PromijeniVelicinu(8, 7);
std::cout << "Nakon povecanja na 8, popuna 7: ";
for(auto x : v) std::cout << x << " ";
std::cout << "\nVelicina: " << v.DajVelicinu() << std::endl;
v.PromijeniVelicinu(6);
std::cout << "Nakon smanjenja na 6: ";
for(auto x : v) std::cout << x << " ";
std::cout << "\nVelicina: " << v.DajVelicinu() << std::endl;
Vektor<int> v2{1, 2, 3, 4};
std::cout << "Vektor iz initializer_list: ";
for(auto x : v2) std::cout << x << " ";
std::cout << std::endl;
Vektor<int> v3(v2);
std::cout << "Kopirani vektor v3: ";
for(auto x : v3) std::cout << x << " ";
std::cout << std::endl;
Vektor<int> v4(std::move(v3));
std::cout << "Pomjereni vektor v4: ";
for(auto x : v4) std::cout << x << " ";
std::cout << "\nVelicina v3 nakon move: " << v3.DajVelicinu() << std::endl;
Vektor<int> v5;
v5 = v4;
std::cout << "Vektor v5 nakon dodjele v5 = v4: ";
for(auto x : v5) std::cout << x << " ";
std::cout << std::endl;
try {
std::cout << v5[100] << std::endl;
} catch(std::range_error &e) {
std::cout << "Uhvatili smo izuzetak: " << e.what() << std::endl;
}
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: