Advertisement
Merevoli

Untitled

May 21st, 2022
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. template<typename T>
  2. class Vector {
  3. public:
  4. Vector() {
  5. arr = new T[default_capacity];
  6. cap = default_capacity;
  7. elems = 0;
  8. };
  9.  
  10. void push_back(const T &data);
  11. void pop_back();
  12.  
  13. [[nodiscard]] bool empty() const;
  14. [[nodiscard]] size_t size() const;
  15. [[nodiscard]] size_t capacity() const;
  16. T &operator[](size_t pos);
  17.  
  18. ~Vector();
  19. private:
  20. T *arr = nullptr;
  21. size_t cap;
  22. size_t elems;
  23. const int default_capacity = 20;
  24. };
  25.  
  26. template<typename T>
  27. Vector<T>::~Vector() {
  28. delete [] arr;
  29. }
  30.  
  31. template<typename T>
  32. void Vector<T>::push_back(const T &data) {
  33. if (elems < cap) {
  34. *(arr + elems) = data;
  35. elems++;
  36. } else {
  37. auto tmp_arr = new T[cap * 2];
  38. cap *= 2;
  39. for (int i = 0; i < elems; i++) {
  40. tmp_arr[i] = arr[i];
  41. }
  42. delete [] arr;
  43. arr = tmp_arr;
  44.  
  45. *(arr + elems) = data;
  46. elems++;
  47. }
  48. }
  49.  
  50. template<typename T>
  51. T &Vector<T>::operator[](size_t pos) {
  52. if (pos >= 0 && pos <= elems)
  53. return *(this->arr + pos);
  54. }
  55.  
  56. template<typename T>
  57. size_t Vector<T>::size() const {
  58. return elems;
  59. }
  60.  
  61. template<typename T>
  62. size_t Vector<T>::capacity() const {
  63. return cap;
  64. }
  65.  
  66. template<typename T>
  67. void Vector<T>::pop_back() {
  68. if (empty())
  69. return;
  70. elems--;
  71. }
  72.  
  73. template<typename T>
  74. bool Vector<T>::empty() const {
  75. return elems == 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement