#include "Array.h" #include "exception.h" Array::Array(int start) { if (start < 0) { capacity = DEFAULT_CAPACITY; } capacity = start; elements_storage = new int[capacity]; size = 0; } Array& Array::operator =(const Array& arr){ if (this == &arr) return *this; delete[] elements_storage; capacity = arr.capacity; elements_storage = new int[capacity]; size = arr.size; for (int i = 0; i < size; i++) elements_storage[i] = arr.elements_storage[i]; return *this; } int& Array::operator[](const int index) { if (index >= size) throw Exception(); return elements_storage[index]; } Array::Array(const Array& value) { capacity = value.capacity; size = value.size; elements_storage = new int[capacity]; for (int i = 0; i < size; i++) { elements_storage[i] = value.elements_storage[i]; } } Array::~Array() { delete[] elements_storage; } ostream& operator <<(ostream& os, Array& arr) { os << "[ "; for (int i = 0; i < arr.size-1; i++) os << arr.elements_storage[i] << ", "; os << arr.elements_storage[arr.size - 1]; os << " ]"; return os; } void Array::increase_capacity(int new_capacity) { capacity = new_capacity > capacity * 2 ? new_capacity : capacity * 2; int* new_stor = new int[capacity]; for (int i = 0; i < size; i++) new_stor[i] = elements_storage[i]; delete[] elements_storage; elements_storage = new int[capacity]; for (int i = 0; i < size; i++) elements_storage[i] = new_stor[i]; delete[] new_stor; } int Array::get_size() { return size; } void Array::insert(int index, int value) { if (index < 0 || index>size) throw Exception(); if (size == capacity) increase_capacity(size + 1); for (int i = size - 1; i >= index; i--) elements_storage[i + 1] = elements_storage[i]; elements_storage[index] = value; size++; } void Array::push(int value) { insert(size, value); } void Array::remove(int index) { if (index < 0 || index >= size) throw Exception(); for (int i = index; i < size - 1; i++) elements_storage[i] = elements_storage[i + 1]; elements_storage[size - 1] = -10000000; size--; } void Array::pop() { remove(size - 1); }