Advertisement
MeehoweCK

Untitled

Dec 15th, 2022
702
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template<class T>
  6. class Tablica
  7. {
  8.     unsigned wielkosc;
  9.     T* tablica;
  10. public:
  11.     Tablica();
  12.     explicit Tablica(unsigned w);
  13.     ~Tablica();
  14.     void dodaj(T nowy);
  15.     void zmien_rozmiar(unsigned nowy);
  16.     void wypisz() const;
  17.     void usun_dane();
  18.     unsigned rozmiar() const;
  19.     T& operator[](unsigned nr);
  20. };
  21.  
  22. template<class T>
  23. Tablica<T>::Tablica() : wielkosc(0), tablica(nullptr) {}
  24.  
  25. template<class T>
  26. Tablica<T>::Tablica(unsigned w) : wielkosc(w), tablica(new T[w])
  27. {
  28.     for(unsigned i = 0; i < w; ++i)
  29.         tablica[i] = 0;
  30. }
  31.  
  32. template<class T>
  33. Tablica<T>::~Tablica()
  34. {
  35.     if(tablica != nullptr)
  36.         delete[] tablica;
  37.     cout << "Tablica poprawnie usunieta.\n";
  38. }
  39.  
  40. template<class T>
  41. void Tablica<T>::dodaj(T nowy)
  42. {
  43.     // jeżeli tablica dotychczas jest pusta, alokujemy do niej pamięć dla tablicy jednoelementowej:
  44.     if(tablica == nullptr)
  45.     {
  46.         tablica = new T[1];
  47.         tablica[0] = nowy;
  48.         wielkosc = 1;
  49.         return;
  50.     }
  51.     // w przeciwnym wypadku:
  52.     // tworzymy tablicę tymczasową o rozmiarze dotychczasowej tablicy
  53.     T* temp = new T[wielkosc];
  54.     // kopiujemy zawartość tablicy dotychczasowej do nowej, tymczasowej
  55.     for(unsigned i = 0; i < wielkosc; ++i)
  56.         temp[i] = tablica[i];
  57.     // zwalniamy pamięć z dotychczasowej tablicy
  58.     delete[] tablica;
  59.     // na miejscu tablicy tworzymy nową, o rozmiarze o 1 większym
  60.     tablica = new int[wielkosc + 1];
  61.     // do nowej tablicy kopiujemy zawartość tymczasowej
  62.     for(unsigned i = 0; i < wielkosc; ++i)
  63.         tablica[i] = temp[i];
  64.     // zwalniamy pamięć z tablicy tymczasowej
  65.     delete[] temp;
  66.     // na ostatni element tablicy wpisujemy nową wartość
  67.     tablica[wielkosc] = nowy;
  68.     // zwiększamy wielkość o 1
  69.     ++wielkosc;
  70. }
  71.  
  72. template <class T>
  73. void Tablica<T>::zmien_rozmiar(unsigned nowy)
  74. {
  75.     if(wielkosc==nowy)
  76.         return;
  77.  
  78.     if(wielkosc == 0)
  79.     {
  80.         wielkosc = nowy;
  81.         tablica = new T[wielkosc];
  82.  
  83.         for(unsigned i = 0; i < wielkosc; ++i)
  84.             tablica[i] = 0;
  85.         return;
  86.     }
  87.  
  88.     if(wielkosc<nowy)
  89.     {
  90.         T* temp= new T[wielkosc];
  91.         for(unsigned i=0; i<wielkosc; i++)
  92.             temp[i]=tablica[i];
  93.  
  94.         delete[] tablica;
  95.  
  96.         tablica = new T[nowy];
  97.         for (unsigned i=0; i<wielkosc; ++i)
  98.             tablica[i] = temp[i];
  99.         delete [] temp;
  100.  
  101.         for(unsigned i=wielkosc; i<nowy; i++)
  102.             tablica[i] = 0;
  103.  
  104.         wielkosc=nowy;
  105.         return;
  106.     }
  107.  
  108.     if(nowy==0)
  109.     {
  110.         delete[] tablica;
  111.         wielkosc=0;
  112.         return;
  113.     }
  114.  
  115.     wielkosc=nowy;
  116.     T* temp = new T[wielkosc];
  117.     for (unsigned i=0; i<wielkosc; i++)
  118.         temp[i]= tablica[i];
  119.  
  120.     delete[] tablica;
  121.     tablica = new T[wielkosc];
  122.     for (unsigned i=0; i<wielkosc; ++i)
  123.         tablica[i] = temp[i];
  124.     delete [] temp;
  125.  
  126.  
  127.  
  128. }
  129.  
  130. template <class T>
  131. void Tablica<T>::wypisz() const
  132. {
  133.     if(wielkosc > 0)
  134.         for(unsigned i = 0; i < wielkosc; ++i)
  135.             cout << tablica[i] << '\t';
  136.     cout << endl;
  137. }
  138.  
  139. template <class T>
  140. void Tablica<T>::usun_dane()
  141. {
  142.     zmien_rozmiar(0);
  143. }
  144.  
  145. template <class T>
  146. unsigned Tablica<T>::rozmiar() const
  147. {
  148.     return wielkosc;
  149. }
  150.  
  151. template <class T>
  152. T& Tablica<T>::operator[](unsigned nr)
  153. {
  154.     return tablica[nr];
  155. }
  156.  
  157. int main()
  158. {
  159.     Tablica<double> tablica(10);
  160.     tablica[3] = 5.5;
  161.     tablica.wypisz();
  162.  
  163.     return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement