123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #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);
- }
|