Advertisement
Merevoli

Untitled

May 21st, 2022
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. template<typename T>
  2. class Vector {
  3. public:
  4. Vector() {
  5. cap = alloc;
  6. vector = (T*)malloc(sizeof(T) * alloc);
  7. elem_num = 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 *vector = nullptr;
  21. size_t cap;
  22. size_t elem_num;
  23. const int alloc = 20;
  24. };
  25.  
  26. template<typename T>
  27. Vector<T>::~Vector() {
  28. free(vector);
  29. }
  30.  
  31. template<typename T>
  32. void Vector<T>::push_back(const T &data) {
  33. if (elem_num < cap) {
  34. *(vector + elem_num) = data;
  35. elem_num++;
  36. } else {
  37. vector = (T*)realloc(vector, sizeof(T) * cap * 2);
  38. cap *= 2;
  39.  
  40. if (vector) {
  41. *(vector + elem_num) = data;
  42. elem_num++;
  43. }
  44. }
  45. }
  46.  
  47. template<typename T>
  48. void Vector<T>::pop_back() {
  49. if (empty())
  50. return;
  51. elem_num--;
  52. }
  53.  
  54. template<typename T>
  55. T &Vector<T>::operator[](size_t pos) {
  56. if (pos >= 0 && pos <= elems)
  57. return *(this->arr + pos);
  58. throw std::out_of_range("Out of bounds element access");
  59. }
  60.  
  61. template<typename T>
  62. size_t Vector<T>::capacity() const {
  63. return cap;
  64. }
  65.  
  66. template<typename T>
  67. bool Vector<T>::empty() const {
  68. return elem_num == 0;
  69. }
  70.  
  71. template<typename T>
  72. size_t Vector<T>::size() const {
  73. return elem_num;
  74. }
  75.  
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement