Advertisement
Guest User

Untitled

a guest
May 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. #ifndef _LISTANIZOM_H_
  2. #define _LISTANIZOM_H_
  3. #include<iostream>
  4. #include<stdexcept>
  5.  
  6. template<typename T>
  7. class ListaNizom {
  8. private:
  9. T* elementi_ = new T[maxSize_];
  10. size_t size_{0};
  11. size_t maxSize_;
  12. int front{0}, back{0};
  13. public:
  14. ListaNizom() = default;
  15. ListaNizom(T* elementi, size_t size, size_t maxSize) : elementi_{elementi}, size_{size}, maxSize_{maxSize} {}
  16. ListaNizom(const ListaNizom<T>& o);
  17. ListaNizom(ListaNizom<T>& o);
  18. const ListaNizom<T>& operator=(const ListaNizom<T>& o);
  19. const T& operator[](int index) const { return elementi_[index]; }
  20. T& operator[](int index) { return elementi_[index]; }
  21. void reallocate();
  22. size_t size() const { return size_; }
  23. size_t maxSize() { return maxSize_; }
  24. void push_back(const T& value);
  25. void push_back(const T&& value);
  26. void pop();
  27. void print(const ListaNizom<T>& lista) const;
  28.  
  29. };
  30.  
  31. template<typename T>
  32. ListaNizom<T> :: ListaNizom(const ListaNizom<T>& o) {
  33. maxSize_ = o.maxSize_;
  34. size_ = o.size_;
  35. elementi_ = new T[maxSize_];
  36. for( size_t i = 0; i < size_; ++i ) {
  37. elementi_[i] = o.elementi_[i];
  38. }
  39. }
  40.  
  41. template<typename T>
  42. ListaNizom<T> :: ListaNizom(ListaNizom<T>& o) {
  43. maxSize_ = o.maxSize_;
  44. size_ = o.size_;
  45. elementi_ = o.elementi_;
  46. o.elementi_ = nullptr;
  47. }
  48. template<typename T>
  49. const ListaNizom<T>& ListaNizom<T> :: operator=(const ListaNizom<T>& o) {
  50. if(this!=o) {
  51. delete [] elementi_;
  52. maxSize_ = o.maxSize_;
  53. size_ = o.size_;
  54. elementi_ = new T[maxSize_];
  55. for(size_t i = 1; i < size_; ++i)
  56. elementi_[i] = o.elementi_[i];
  57. }
  58. return *this;
  59. }
  60.  
  61. template<typename T>
  62. void ListaNizom<T> :: push_back(const T& value) {
  63. if(size_ == 0) elementi_[0] = value; back++; size_++;
  64. if(size_ != maxSize_) {
  65. back = (back + 1) % maxSize_;
  66. elementi_[back] = value;
  67. ++size_;
  68. back++;
  69. }
  70. }
  71.  
  72. template<typename T>
  73. void ListaNizom<T> :: push_back(const T&& value) {
  74. if(size_ == 0) elementi_[0] = value;
  75. else if(size_ != maxSize_) {
  76. back = ( back + 1) % size_;
  77. elementi_[back] = value;
  78. ++size_;
  79. }
  80.  
  81. }
  82.  
  83. template<typename T>
  84. void ListaNizom<T> :: pop() {
  85. if(size_ == 0) throw std::out_of_range("Array is empty!");
  86. if(size_) {
  87. --size_;
  88. }
  89. }
  90.  
  91. template<typename T>
  92. void ListaNizom<T> :: print(const ListaNizom<T>& lista) const {
  93. for(int i = 0; i < lista.size(); ++i)
  94. std::cout << lista[i] << std::endl;
  95. }
  96.  
  97. template<typename T>
  98. void ListaNizom<T> :: reallocate() {
  99. maxSize_ *= 2;
  100. T* newElementi_ = new T[maxSize_];
  101. std::copy(elementi_, elementi_ + size_, newElementi_);
  102. delete[] elementi_;
  103. elementi_ = newElementi_;
  104. }
  105.  
  106.  
  107. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement