Array.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "Array.h"
  2. #include "exception.h"
  3. Array::Array(int start) {
  4. if (start < 0) {
  5. capacity = DEFAULT_CAPACITY;
  6. }
  7. capacity = start;
  8. elements_storage = new int[capacity];
  9. size = 0;
  10. }
  11. Array&
  12. Array::operator =(const Array& arr){
  13. if (this == &arr)
  14. return *this;
  15. delete[] elements_storage;
  16. capacity = arr.capacity;
  17. elements_storage = new int[capacity];
  18. size = arr.size;
  19. for (int i = 0; i < size; i++)
  20. elements_storage[i] = arr.elements_storage[i];
  21. return *this;
  22. }
  23. int&
  24. Array::operator[](const int index) {
  25. if (index >= size)
  26. throw Exception();
  27. return elements_storage[index];
  28. }
  29. Array::Array(const Array& value) {
  30. capacity = value.capacity;
  31. size = value.size;
  32. elements_storage = new int[capacity];
  33. for (int i = 0; i < size; i++) {
  34. elements_storage[i] = value.elements_storage[i];
  35. }
  36. }
  37. Array::~Array() {
  38. delete[] elements_storage;
  39. }
  40. ostream& operator <<(ostream& os, Array& arr) {
  41. os << "[ ";
  42. for (int i = 0; i < arr.size-1; i++)
  43. os << arr.elements_storage[i] << ", ";
  44. os << arr.elements_storage[arr.size - 1];
  45. os << " ]";
  46. return os;
  47. }
  48. void
  49. Array::increase_capacity(int new_capacity) {
  50. capacity = new_capacity > capacity * 2 ? new_capacity : capacity * 2;
  51. int* new_stor = new int[capacity];
  52. for (int i = 0; i < size; i++)
  53. new_stor[i] = elements_storage[i];
  54. delete[] elements_storage;
  55. elements_storage = new int[capacity];
  56. for (int i = 0; i < size; i++)
  57. elements_storage[i] = new_stor[i];
  58. delete[] new_stor;
  59. }
  60. int
  61. Array::get_size() {
  62. return size;
  63. }
  64. void
  65. Array::insert(int index, int value) {
  66. if (index < 0 || index>size)
  67. throw Exception();
  68. if (size == capacity)
  69. increase_capacity(size + 1);
  70. for (int i = size - 1; i >= index; i--)
  71. elements_storage[i + 1] = elements_storage[i];
  72. elements_storage[index] = value;
  73. size++;
  74. }
  75. void
  76. Array::push(int value) {
  77. insert(size, value);
  78. }
  79. void
  80. Array::remove(int index) {
  81. if (index < 0 || index >= size)
  82. throw Exception();
  83. for (int i = index; i < size - 1; i++)
  84. elements_storage[i] = elements_storage[i + 1];
  85. elements_storage[size - 1] = -10000000;
  86. size--;
  87. }
  88. void
  89. Array::pop() {
  90. remove(size - 1);
  91. }