Advertisement
Guest User

Array.h

a guest
Dec 3rd, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <algorithm>
  2. #include <initializer_list>
  3. #include <iostream>
  4. #include "Book.h"
  5.  
  6.  
  7. using std::initializer_list;
  8. using std::fill;
  9. using std::copy;
  10. using std::swap;
  11.  
  12. template <typename T>
  13. class Array
  14. {
  15. public:
  16.     Array();
  17.     Array(const initializer_list<T>&);
  18.     Array(const size_t size);
  19.     Array(const Array&);
  20.    
  21.     Array& operator =(const Array&);
  22.     T* begin() const;
  23.     T* end() const;
  24.     T& operator [](const size_t);
  25.     const T& operator [](const size_t) const;
  26.     size_t size() const;
  27.     friend class Book;
  28.     ~Array();
  29.  
  30. private:
  31.     void swap(Array&, Array&);
  32.     T* data_;
  33.     size_t size_;
  34. };
  35.  
  36. template <typename T>
  37. Array<T>::Array() :
  38.     data_(nullptr),
  39.     size_(0)
  40. {}
  41.  
  42. template <typename T>
  43. Array<T>::Array(const size_t size) :
  44.     data_(new T[size]),
  45.     size_(size)
  46. {
  47.     // вызываем конструкторы для каждого элемента
  48.     fill(data_, data_ + size_, T());
  49. }
  50.  
  51. template<typename T>
  52. Array<T>::Array(const initializer_list<T>& il) :
  53.     data_(new T[il.size()]),
  54.     size_(il.size())
  55. {
  56.     copy(il.begin(), il.end(), data_);
  57. }
  58.  
  59. template <typename T>
  60. Array<T>::Array(const Array& arr)
  61. {
  62.     size_ = arr.size_;
  63.     if (arr.data_)
  64.     {
  65.         data_ = new T[size_];
  66.         // копируем элементы в новый контейнер
  67.         copy(arr.data_, arr.data_ + size_, data_);
  68.     }
  69.     else
  70.         data_ = nullptr;
  71. }
  72.  
  73. template <typename T>
  74. Array<T>& Array<T>::operator =(const Array& arr)
  75. {
  76.     // исключаем работу при присваивании самому себе
  77.     if (this != &arr)
  78.         Array(arr).swap(*this); // Copy-and-swap idiom
  79.     return *this;
  80. }
  81.  
  82. template <typename T>
  83. Array<T>::~Array()
  84. {
  85.     delete[] data_;
  86. }
  87.  
  88. template <typename T>
  89. T* Array<T>::begin() const
  90. {
  91.     return data_;
  92. }
  93.  
  94. template <typename T>
  95. T* Array<T>::end() const
  96. {
  97.     return data_ + size_;
  98. }
  99.  
  100. template <typename T>
  101. T& Array<T>::operator [](const size_t index)
  102. {
  103.     return data_[index];
  104. }
  105.  
  106. template <typename T>
  107. const T& Array<T>::operator [](const size_t index) const
  108. {
  109.     return data_[index];
  110. }
  111.  
  112. template <typename T>
  113. size_t Array<T>::size() const
  114. {
  115.     return size_;
  116. }
  117.  
  118. template <typename T>
  119. void Array<T>::swap(Array& first, Array& second)
  120. {
  121.     swap(first.data_, second.data_);
  122.     swap(first.size_, second.size_);
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement