DarkArtheme

custom vector coursera

Dec 23rd, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. template <typename T>
  7. class SimpleVector {
  8. public:
  9.   SimpleVector() = default;
  10.   explicit SimpleVector(size_t size);
  11.   ~SimpleVector();
  12.  
  13.   T& operator[](size_t index);
  14.  
  15.   T* begin();
  16.   T* end();
  17.  
  18.   size_t Size() const;
  19.   size_t Capacity() const;
  20.   void PushBack(const T& value);
  21.  
  22. private:
  23.   T* data = nullptr;
  24.   size_t size = 0;
  25.   size_t capacity = 0;
  26. };
  27.  
  28. template <typename T>
  29. SimpleVector<T>::SimpleVector(size_t size)
  30.   : data(new T[size])
  31.   , size(size)
  32.   , capacity(size)
  33. {
  34. }
  35.  
  36. template <typename T>
  37. SimpleVector<T>::~SimpleVector() {
  38.   delete[] data;
  39. }
  40.  
  41. template <typename T>
  42. T& SimpleVector<T>::operator[](size_t index) {
  43.   return data[index];
  44. }
  45.  
  46. template <typename T>
  47. size_t SimpleVector<T>::Size() const {
  48.   return size;
  49. }
  50.  
  51. template <typename T>
  52. size_t SimpleVector<T>::Capacity() const {
  53.   return capacity;
  54. }
  55.  
  56. template <typename T>
  57. void SimpleVector<T>::PushBack(const T& value) {
  58.   if (size >= capacity) {
  59.     auto new_cap = capacity == 0 ? 1 : 2 * capacity;
  60.     auto new_data = new T[new_cap];
  61.     copy(begin(), end(), new_data);
  62.     delete[] data;
  63.     data = new_data;
  64.     capacity = new_cap;
  65.   }
  66.   data[size++] = value;
  67. }
  68.  
  69. template <typename T>
  70. T* SimpleVector<T>::begin() {
  71.   return data;
  72. }
  73.  
  74. template <typename T>
  75. T* SimpleVector<T>::end() {
  76.   return data + size;
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment