Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. template<class T>
  5. class CustomArray
  6. {
  7. private:
  8. T* elements;
  9. int size;
  10. int tempSize = 0;
  11. T* tempElements = 0;
  12.  
  13. bool CheckIndexExists(int index) {
  14. if (index > size || index < 0) {
  15. throw std::invalid_argument("No such index exists!");
  16. }
  17. }
  18. public:
  19. CustomArray(int s)
  20. {
  21. size = s;
  22. elements = new T[size];
  23. for (int i = 0; i < size; i++)
  24. elements[i] = 0;
  25. }
  26.  
  27. ~CustomArray()
  28. {
  29. delete elements;
  30. }
  31.  
  32. T& operator[](int index)
  33. {
  34. CheckIndexExists(index);
  35.  
  36. return elements[index];
  37. }
  38.  
  39. T& GetElementAtIndex(int index) {
  40. return elements[index];
  41. }
  42.  
  43. void operator=(T temp)
  44. {
  45. for (int i = 0; i < size; i++)
  46. elements[i] = temp;
  47. }
  48.  
  49. void PrintArr() {
  50. for (size_t i = 0; i < size; i++)
  51. {
  52. cout << elements[i] << "\n";
  53. }
  54. }
  55.  
  56. void Clear() {
  57. tempSize = size;
  58. size = -1;
  59. tempElements = elements;
  60. elements = NULL;
  61. }
  62.  
  63. void Restore() {
  64. if (size == -1) {
  65. size = tempSize;
  66. elements = tempElements;
  67. }
  68. }
  69.  
  70. int Size() {
  71. return this->size;
  72. }
  73.  
  74. void SortArrInAscendingOrder() {
  75. T temp;
  76.  
  77. for (int i = 0; i < size; i++)
  78. {
  79. for (int j = i + 1; j < size; j++)
  80. {
  81. if (elements[j] < elements[i])
  82. {
  83. temp = elements[i];
  84. elements[i] = elements[j];
  85. elements[j] = temp;
  86. }
  87. }
  88. }
  89. }
  90.  
  91. void RemoveAt(int index)
  92. {
  93. if (index < 0 || index >= size)
  94. {
  95. throw std::invalid_argument("Index out of range!");
  96. }
  97.  
  98. bool isValueRemoved = false;
  99.  
  100. T* newArr = new T[size - 1];
  101.  
  102. for (int i = 0; i < size; i++)
  103. {
  104. if (i == index)
  105. {
  106. isValueRemoved = true;
  107. continue;
  108. }
  109.  
  110. if (isValueRemoved)
  111. {
  112. newArr[i - 1] = elements[i];
  113. }
  114. else
  115. {
  116. newArr[i] = elements[i];
  117. }
  118. }
  119.  
  120. if (elements)
  121. {
  122. delete elements;
  123. }
  124.  
  125. size--;
  126. elements = new double[size];
  127.  
  128. for (int i = 0; i < size; i++)
  129. {
  130. elements[i] = newArr[i];
  131. }
  132.  
  133. delete newArr;
  134. }
  135.  
  136. void Insert(int index, T value)
  137. {
  138. if (index < 0 || index > size)
  139. {
  140. throw std::invalid_argument("Index out if range!");
  141. }
  142.  
  143. size++;
  144.  
  145. T* newArr = new T[size];
  146. bool isValueInserted = false;
  147.  
  148. for (int i = 0; i < size; i++)
  149. {
  150. if (i == index)
  151. {
  152. newArr[i] = value;
  153. isValueInserted = true;
  154. continue;
  155. }
  156.  
  157. if (isValueInserted)
  158. {
  159. newArr[i] = elements[i - 1];
  160. }
  161. else
  162. {
  163. newArr[i] = elements[i];
  164. }
  165. }
  166.  
  167. if (elements)
  168. {
  169. delete elements;
  170. }
  171.  
  172. elements = new double[size];
  173.  
  174. for (int i = 0; i < size; i++)
  175. {
  176. elements[i] = newArr[i];
  177. }
  178.  
  179. delete newArr;
  180. }
  181. };
  182.  
  183. int main()
  184. {
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement