Advertisement
MeehoweCK

Untitled

Nov 3rd, 2022
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #ifndef WEKTOR_H
  2. #define WEKTOR_H
  3.  
  4. template <class T>
  5. class Wektor
  6. {
  7.     public:
  8.         Wektor();                       // konstruktor domyślny tworzący pusty wektor
  9.         explicit Wektor(unsigned r);           // konstruktor tworzący wektor o podanym rozmiarze
  10.         ~Wektor();                      // destruktor
  11.         void dodaj_element(T nowy);     // dodawanie nowego elementu na koniec wektora
  12.         usun_element(unsigned nr);      // usuwanie wybranego elementu
  13.         T& operator[](unsigned nr) {return tablica[nr];}        // dostęp do wybranego elementu
  14.         void dodaj_wektor(Wektor<T> dodawany);
  15.     private:
  16.         T* tablica;
  17.         unsigned rozmiar;
  18. };
  19.  
  20. Template <class T>
  21. Wektor<T>::Wektor() : rozmiar(0), tablica(nullptr) {}
  22.  
  23. Template <class T>
  24. Wektor<T>::Wektor(unsigned r) : rozmiar(r), tablica(new T[r]) {}
  25.  
  26. Template <class T>
  27. Wektor<T>::~Wektor()
  28. {
  29.     if(tablica != nullptr)
  30.         delete[] tablica;       // zwolnienie pamięci
  31. }
  32.  
  33. Template <class T>
  34. void Wektor<T>::dodaj_element(T nowy)
  35. {
  36.     // pusty wektor:
  37.     if(tablica == nullptr)
  38.     {
  39.         tablica = new T[1];
  40.         tablica[0] = nowy;
  41.         rozmiar = 1;
  42.         return;
  43.     }
  44.    
  45.     // niepusty wektor
  46.     // 1. utworzenie tablicy tymczasowej o dotychczasowym rozmiarze
  47.     T* temp = new T[rozmiar];
  48.     // 2. skopiowanie dotychczasowej tablicy do tymczasowej
  49.     for(unsigned i = 0; i < rozmiar; ++i)
  50.         temp[i] = tablica[i];
  51.     // 3. zwolnienie pamięci z tablicy dotychczasowej
  52.     delete[] tablica;
  53.     // 4. utworzenie nowej tablicy o rozmiarze +1
  54.     tablica = new T[rozmiar + 1];
  55.     // 5. skopiowanie tablicy tymczasowej do nowej
  56.     for(unsigned i = 0; i < rozmiar; ++i)
  57.         tablica[i] = temp[i];
  58.     // 6. zwolnienie pamięci z tablicy tymczasowej
  59.     delete[] temp;
  60.     // 7. dodanie nowego elementu na koniec tablicy
  61.     tablica[rozmiar] = nowy;
  62.     // 8. zwiększenie rozmiaru o 1
  63.     ++rozmiar;
  64. }
  65.  
  66. Template <class T>
  67. void Wektor<T>::usun_element(unsigned nr)
  68. {
  69.     if(nr >= rozmiar)
  70.     {
  71.         // dodanie wyjątku
  72.     }
  73.     else
  74.     {
  75.         // 1. stworzenie tablicy tymczasowej o rozmiarze -1
  76.         T* temp = new T[rozmiar - 1];
  77.         // 2. skopiowanie zawartości do tablicy tymczasowej z pominięciem elementu nr
  78.         unsigned j = 0;
  79.         for(unsigned i = 0; i < rozmiar; ++i)
  80.         {
  81.             if(i == nr)
  82.                 continue;       // przejście do następnego kroku pętli
  83.             temp[j] = tablica[i];
  84.             ++j;
  85.         }
  86.         // 3. zwolnienie pamięci z tablicy dotychczasowej
  87.         delete[] tablica;
  88.         // 4. zmiana rozmiaru na (rozmiar - 1)
  89.         --rozmiar;
  90.         // 5. utworzenie nowej tablicy o nowym rozmiarze
  91.         tablica = new T[rozmiar];
  92.         // 6. skopiowanie tablicy temp do nowej
  93.         for(unsigned i = 0; i < rozmiar; ++i)
  94.             tablica[i] = temp[i];
  95.         // 7. zwolnienie pamięci z tablicy temp
  96.         delete[] temp;
  97.     }
  98. }
  99.  
  100. #endif // WEKTOR_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement