Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  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. //2
  16. Cudo(string ime, pair<string, string> GdjeSeNalazi, int godina) :
  17. naziv(ime), lokacija(GdjeSeNalazi), godina_pronalaska(godina){}
  18. //3
  19. Cudo(string ime, string mjesto, string detaljnijeMjesto, int godina) :
  20. naziv(ime), godina_pronalaska(godina) {
  21. lokacija.first = mjesto;
  22. lokacija.second = detaljnijeMjesto;
  23. }
  24.  
  25. string DajNaziv() const {return naziv;}
  26. string DajLokaciju(bool prvi_drugi) const {
  27. if(prvi_drugi)
  28. {
  29. return lokacija.first;
  30. }
  31. return lokacija.second;
  32. }
  33.  
  34. int DajGodinu() const {return godina_pronalaska;}
  35. };
  36.  
  37. class SvjetskaCuda {
  38. vector<shared_ptr<Cudo>> cuda;
  39.  
  40. public:
  41. //1
  42. SvjetskaCuda(){}
  43. //7
  44. SvjetskaCuda(const SvjetskaCuda &poslano)
  45. {
  46. this->cuda.resize(poslano.cuda.size());
  47. for(int i=0;i<this->cuda.size();i++)
  48. {
  49. this->cuda[i] = make_shared<Cudo>(*poslano.cuda[i]);
  50. }
  51. }
  52. // Ovo bi se trebalo preko swapa implementirati
  53. // Nisam siguran zasto ne moze, ali izbacuje mi error kada pokusam
  54. //8
  55. SvjetskaCuda(SvjetskaCuda &&poslano)
  56. {
  57. this->cuda.resize(poslano.cuda.size());
  58. for(int i=0;i<this->cuda.size();i++)
  59. {
  60. this->cuda[i] = make_shared<Cudo>(*poslano.cuda[i]);
  61. poslano.cuda[i] = nullptr;
  62. }
  63. }
  64.  
  65. //4
  66. void Dodaj(const string &ime, const pair<string, string> &GdjeSeNalazi, const int &godina)
  67. {
  68. cuda.resize(cuda.size()+1);
  69. cuda[cuda.size() - 1] = make_shared<Cudo>(ime , GdjeSeNalazi, godina);
  70. }
  71. //5
  72. void Dodaj(const Cudo &c)
  73. {
  74. cuda.resize(cuda.size() +1);
  75. cuda[cuda.size() - 1] = make_shared<Cudo>(c);
  76. }
  77. //Takodjer 6, ali samo za jednu stvar
  78. friend SvjetskaCuda &operator +=(SvjetskaCuda &s, const Cudo &c)
  79. {
  80. s.cuda.resize(s.cuda.size()+1);
  81. s.cuda[s.cuda.size() - 1] = make_shared<Cudo>(c);
  82. return s;
  83. }
  84. //6
  85. void Dodaj(const initializer_list<Cudo> &lista)
  86. {
  87. this->cuda.resize(cuda.size() + lista.size());
  88. auto it(lista.begin());
  89. for(int i = this->cuda.size() - lista.size();i<this->cuda.size();i++)
  90. {
  91. this->cuda[i] = make_shared<Cudo>(*it);
  92. it++;
  93. }
  94. }
  95. //9
  96. friend bool operator ==(const SvjetskaCuda &s1, const SvjetskaCuda &s2)
  97. {
  98. if(s1.cuda.size() != s2.cuda.size())
  99. {
  100. return 0;
  101. }
  102.  
  103. for(int i=0;i<s1.cuda.size();i++)
  104. {
  105. if(s1.cuda[i]->DajNaziv() != s2.cuda[i]->DajNaziv() || s1.cuda[i]->DajGodinu() != s2.cuda[i]->DajGodinu()
  106. || s1.cuda[i]->DajLokaciju(1) != s2.cuda[i]->DajLokaciju(1) || s1.cuda[i]->DajLokaciju(0) != s2.cuda[i]->DajLokaciju(0))
  107. {
  108. return 0;
  109. }
  110. }
  111. return 1;
  112. }
  113. //10
  114. friend SvjetskaCuda &operator -=(SvjetskaCuda &sv, const string &s)
  115. {
  116. for(auto i=0;i < sv.cuda.size();i++)
  117. {
  118. if(sv.cuda[i]->DajNaziv() == s)
  119. {
  120. sv.cuda.erase(sv.cuda.begin() + i);
  121. }
  122. }
  123. return sv;
  124. }
  125. //11
  126. SvjetskaCuda &operator =(const SvjetskaCuda &sv1)
  127. {
  128. this->cuda.resize(sv1.cuda.size());
  129.  
  130. for(int i=0; i < this->cuda.size();i++)
  131. {
  132. this->cuda[i] = make_shared<Cudo>(*sv1.cuda[i]);
  133. }
  134. return *this;
  135. }
  136. // 12
  137. // Mescini ovo ne valja, posto salje nesto sto prestaje postojati
  138. // A posto su pametni pokazivaci, automatski se izbrise kada prestane postojati
  139. friend SvjetskaCuda &operator /(const SvjetskaCuda &sv, string s)
  140. {
  141. SvjetskaCuda vraca;
  142. for(int i=0;i<sv.cuda.size();i++)
  143. {
  144. if(sv.cuda[i]->DajLokaciju(1) == s)
  145. {
  146. vraca.cuda.resize(vraca.cuda.size() + 1);
  147. vraca.cuda[vraca.cuda.size() - 1] = make_shared<Cudo>(*sv.cuda[i]);
  148. }
  149. }
  150. return vraca;
  151. }
  152. // Ovo pojma nemam, kako da napravim operator koji se ponasa kao pokazivac
  153. //13
  154. int operator *(const SvjetskaCuda &sv)
  155. {
  156. return sv.cuda.size();
  157. }
  158.  
  159. int operator [](string s)
  160. {
  161. for(auto i=0;i < this->cuda.size();i++)
  162. {
  163. if(this->cuda[i]->DajNaziv() == s)
  164. {
  165. return this->cuda[i]->DajGodinu();
  166. }
  167. }
  168. return 0;
  169. }
  170.  
  171. // Ostalo jos ovo da promijeni godinu ali ne da mi se vise
  172.  
  173. };
  174.  
  175. int main()
  176. {
  177. SvjetskaCuda unesco; // (1) - Oprez, ovo mora da radi i kad se implementira (7)
  178. Cudo c1("Mehina kafana", {"BiH", "Sarajevo, Sedrenik"}, 2016); // (2)
  179. Cudo c2("Ibrin golf dvojka", "Srbija", "Novi Pazar", 1843); // (3) - druga sintaksa
  180. unesco.Dodaj("Piramide", {"BiH", "Visoko"}, 2005); // (4)
  181. unesco.Dodaj(c1); // (5);
  182. unesco += c2; // (6) - alternativna sintaksa za (5)
  183. unesco.Dodaj({{"Viseći vrtovi", {"Irak", "Babilon"}, -600},
  184. {"Keopsova piramida", {"Egipat", "Giza"}, -2550},
  185. {"Ajfelov toranj", {"Francuska", "Pariz"}, 1889}}); // (6) - dodaje više odjednom
  186. SvjetskaCuda kopija(unesco); // (7) - duboka kopija
  187. SvjetskaCuda kopija2(std::move(kopija)); // (8)
  188. if(kopija2 == unesco) std::cout << "Fakat su identicni!\n"; // (9)
  189. unesco -= "Mehina kafana"; // (10) - briše čudo iz kolekcije
  190. kopija = kopija2; // (11)
  191. // SvjetskaCuda bosanska_cuda;
  192. // // bosanska_cuda = unesco / "BiH"; // (12) - izdvaja čuda koja su u BiH
  193. // //std::cout << "Broj bosanskih čuda: " << *bosanska_cuda << std::cout; // (13)
  194. std::cout << unesco["Ajfelov toranj"] << std::endl; // (14) - daje godinu izgradnje
  195. // //unesco["Piramide"] = -10000; // (15) - mijenja godinu izgradnje
  196.  
  197. return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement