Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. // taul_d.cpp -esimerkki dynaamisesta taulukosta
  2. #include <iostream>
  3. using std::cout;
  4. using std::ostream;
  5. using std::endl;
  6. #include <sstream>
  7. using std::ostringstream;
  8.  
  9. /**
  10. * Luokka dynaamiselle int-taulukolle
  11. * @code
  12. * <pre name="test">
  13. *   ostringstream ss;
  14. *   cTaulukko luvut(10);
  15. *   ss << luvut; ss.str() === "";
  16. *   luvut.lisaa(0); luvut.lisaa(2); luvut.lisaa(2);
  17. *   luvut.lisaa(4); luvut.lisaa(2);
  18. *   ss << luvut; ss.str() === "0 2 2 4 2 ";       ss.str("");
  19. *   cTaulukko taul;
  20. *   taul.sijoita(luvut);
  21. *   ss << taul;  ss.str() === "0 2 2 4 2 ";       ss.str("");
  22. *   taul.lisaa(99);
  23. *   luvut.lisaa(88);
  24. *   ss << taul;  ss.str() === "0 2 2 4 2 99 ";    ss.str("");
  25. *   ss << luvut; ss.str() === "0 2 2 4 2 88 ";    ss.str("");
  26. * </pre>
  27. * @endcode
  28. */
  29. class cTaulukko {
  30.     std::size_t max_koko;
  31.     std::size_t lkm;
  32.     int *alkiot;
  33.     int vika;
  34. public:
  35.     cTaulukko(int akoko = 0) {
  36.         vika = 0;
  37.         max_koko = 0;
  38.         alkiot = new int[akoko];  // new delete   // new [] -  delete []
  39.         if (alkiot) max_koko = akoko;
  40.         lkm = 0;
  41.     }
  42.     ~cTaulukko() { if (max_koko != 0) delete[] alkiot; max_koko = 0; }
  43.  
  44.     // Pitää olla jokaisessa luokassa jossa on "dynaamista tavaraa"
  45.     void sijoita(const cTaulukko &t) {
  46.         if (max_koko < t.lkm) max_koko = t.lkm;
  47.         for (int i = 0; i < t.lkm; i++)
  48.         {
  49.             lisaa(t[i]);
  50.         }
  51.     }
  52.  
  53.     cTaulukko &operator=(const cTaulukko &t) { sijoita(t); return *this; }
  54.     cTaulukko(const cTaulukko &t) { sijoita(t); } // Copy Constructor
  55.  
  56.     int operator[](int i) const {
  57.         if (0 <= i  &&  i < lkm) return alkiot[i];
  58.         return 0;
  59.     }
  60.     int &operator[](int i) {
  61.         if (0 <= i  &&  i < lkm) return alkiot[i];
  62.         return vika;
  63.     }
  64.  
  65.  
  66.     int lisaa(int luku) {
  67.         if (lkm >= max_koko) return 1;
  68.         alkiot[lkm] = luku;
  69.         lkm++;
  70.         return 0;
  71.     }
  72.  
  73.  
  74.     ostream &tulosta(ostream &os = cout) const;
  75.  
  76.     int lisaa(std::initializer_list<int> lista) {
  77.         for (int luku : lista) if (lisaa(luku)) return 1;
  78.         return 0;
  79.     }
  80. };
  81.  
  82.  
  83.  
  84. ostream &cTaulukko::tulosta(ostream &os) const
  85. {
  86.     int i;
  87.     for (i = 0; i < lkm; i++)
  88.         os << alkiot[i] << " ";
  89.     // os << endl;
  90.     return os;
  91. }
  92.  
  93. ostream &operator<<(ostream &os, const cTaulukko &t) { return t.tulosta(os); }
  94.  
  95. int main(void)
  96. {
  97.     cTaulukko luvut(7);
  98.     luvut.lisaa(0); luvut.lisaa(2);
  99.     cout << luvut << endl;  // 0 2
  100.     cTaulukko taul;
  101.     taul.sijoita(luvut);   // tai jopa  taul = luvut;
  102.     cout << taul << endl;  // tulostaa saman kuin edellä
  103.  
  104.     cTaulukko t0;
  105.     cout << t0 << endl;
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement