SHARE
TWEET

Untitled

a guest Jun 19th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <utility>
  4. #include <vector>
  5. #include <memory>
  6. #include <algorithm>
  7. using namespace std;
  8.  
  9. class Cudo {
  10.     string naziv;
  11.     pair<string, string> lokacija;
  12.     int godina_pronalaska;
  13.  
  14.     public:
  15.     Cudo(const string &ime, const pair<string, string> &GdjeSeNalazi, const int &godina) :
  16.     naziv(ime), lokacija(GdjeSeNalazi), godina_pronalaska(godina){}
  17.  
  18.     Cudo(const string &ime, const string &mjesto, const string &detaljnijeMjesto, const int &godina) :
  19.     naziv(ime), godina_pronalaska(godina) {
  20.         lokacija.first = mjesto;
  21.         lokacija.second = detaljnijeMjesto;
  22.     }
  23. };
  24.  
  25. class SvjetskaCuda {
  26.     vector<shared_ptr<Cudo>> cuda;
  27.  
  28.     public:
  29.     SvjetskaCuda()
  30. {
  31.     cuda.resize(cuda.size() + 1);
  32.     cuda[cuda.size()-1] = make_shared<Cudo>();
  33. }
  34.  
  35. SvjetskaCuda(const SvjetskaCuda &poslano)
  36. {
  37.         this->cuda.resize(poslano.cuda.size());
  38.         for(int i=0;i<this->cuda.size();i++)
  39.             this->cuda[i] = make_shared<Cudo>(poslano.cuda[i]);
  40. }
  41. // Ovo bi se trebalo preko swapa implementirati
  42. // Nisam siguran zasto ne moze, ali izbacuje mi error kada pokusam
  43. SvjetskaCuda(SvjetskaCuda &&poslano)
  44. {
  45.     this->cuda.resize(poslano.cuda.size());
  46.     for(int i=0;i<this->cuda.size();i++)
  47.     {
  48.             this->cuda[i] = make_shared<Cudo>(poslano.cuda[i]);
  49.             poslano.cuda[i] = nullptr;
  50.     }          
  51. }
  52.  
  53.  
  54.  
  55. void Dodaj(const string &ime, const pair<string, string> &GdjeSeNalazi, const int &godina)
  56. {
  57.     cuda.resize(cuda.size()+1);
  58.     cuda[cuda.size() - 1] = make_shared<Cudo>(ime , GdjeSeNalazi, godina);
  59. }
  60. void Dodaj(const Cudo &c)
  61. {
  62.     cuda.resize(cuda.size() +1);
  63.     cuda[cuda.size() - 1] = make_shared<Cudo>(c);
  64. }
  65.  
  66. friend Cudo &operator +=(SvjetskaCuda &s, const Cudo &c)
  67. {
  68.     s.cuda.resize(s.cuda.size()+1);
  69.     s.cuda[s.cuda.size() - 1] = make_shared<Cudo>(c);
  70.     return s;
  71. }
  72.  
  73. void Dodaj(const initializer_list<Cudo> &lista)
  74. {
  75.     cuda.resize(cuda.size() + lista.size());
  76.     auto it(lista.begin());
  77.     for(int i = cuda.size();i<cuda.size() + lista.size();i++)
  78.     {
  79.         cuda[i] = make_shared<Cudo>(*it);
  80.         it++;
  81.     }
  82. }
  83.  
  84. friend bool operator ==(const SvjetskaCuda &s1, const SvjetskaCuda &s2)
  85. {
  86.     if(s1.cuda.size() != s2.cuda.size())
  87.         return 0;
  88.  
  89.     for(int i=0;i<s1.cuda.size();i++)
  90.         if(s1.cuda[i] != s2.cuda[i])
  91.             return 0;
  92.  
  93.         return 1;      
  94. }
  95.  
  96.  
  97. };
  98.  
  99. int main()
  100. {
  101.     SvjetskaCuda unesco; // (1) - Oprez, ovo mora da radi i kad se implementira (7)
  102.  Cudo c1("Mehina kafana", {"BiH", "Sarajevo, Sedrenik"}, 2016); // (2)
  103.  Cudo c2("Ibrin golf dvojka", "Srbija", "Novi Pazar", 1843); // (3) - druga sintaksa
  104.  unesco.Dodaj("Piramide", {"BiH", "Visoko"}, 2005); // (4)
  105.  unesco.Dodaj(c1); // (5);
  106.  unesco += c2; // (6) - alternativna sintaksa za (5)
  107.  unesco.Dodaj({{"Viseći vrtovi", {"Irak", "Babilon"}, -600},
  108.  {"Keopsova piramida", {"Egipat", "Giza"}, -2550},
  109.  {"Ajfelov toranj", {"Francuska", "Pariz"}, 1889}}); // (6) - dodaje više odjednom
  110.  SvjetskaCuda kopija(unesco); // (7) - duboka kopija
  111.  SvjetskaCuda kopija2(std::move(kopija)); // (8)
  112.  if(kopija2 == unesco) std::cout << "Fakat su identicni!\n"; // (9)
  113.  unesco -= "Mehina kafana"; // (10) - briše čudo iz kolekcije
  114.  kopija = kopija2; // (11)
  115.  SvjetskaCuda bosanska_cuda;
  116.  bosanska_cuda = unesco / "BiH"; // (12) - izdvaja čuda koja su u BiH
  117.  std::cout << "Broj bosanskih čuda: " << *bosanska_cuda << std::cout; // (13)
  118.  std::cout << unesco["Ajfelov toranj"] << std::endl; // (14) - daje godinu izgradnje
  119.  unesco["Piramide"] = -10000; // (15) - mijenja godinu izgradnje
  120.  
  121.     return 0;
  122. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top