Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <iostream>
- #include "Exception.h"
- using namespace std;
- class DinArr {
- protected:
- const int ADD = 10;
- int size;
- double *arr;
- int cap;
- public:
- DinArr() {
- size = 0;
- arr = new double[10];
- cap = 10;
- cout << "Created default DinArr!" << endl;
- }
- DinArr(int size) {
- if (size < 0) {
- throw NegativeSizeException();
- }
- else {
- this->size = size;
- cap = size + ADD;
- arr = new double[cap];
- cout << "Created new DinArr with size=" << size << endl;
- }
- }
- DinArr(double *a, int size) {
- if (size < 0) {
- throw NegativeSizeException();
- }
- if (a == nullptr) {
- throw NullPointerException();
- }
- this->size = size;
- cap = size + ADD;
- arr = new double[cap];
- for (int i = 0; i < size; i++) {
- arr[i] = a[i];
- }
- cout << "Copy ended!" << endl;
- }
- int getCap() {
- return cap;
- }
- double &operator[](int ind) {
- if (ind < 0) throw BAD_INDEX_EXP();
- if (ind >= size) throw OutOfBoundException();
- return arr[ind];
- }
- DinArr &operator=(DinArr &A) {
- if (this != &A) {
- delete[] arr;
- arr = new double[A.getCap()];
- size = A.getSize();
- cap = A.getCap();
- for (int i = 0; i < size; i++) {
- arr[i] = A[i];
- }
- }
- cout << "operator= ok!" << endl;
- return *this;
- }
- void reSize(int newSize) {
- if (size >= cap) {
- double *tmp = new double[newSize + ADD];
- for (int i = 0; i < size; i++) {
- tmp[i] = arr[i];
- }
- size = newSize;
- cap = size + ADD;
- delete[] arr;
- arr = tmp;
- cout << "Resized!" << "NEW SIZE:" << size << endl;
- }
- else size += 1;
- }
- int getPos(double x) {
- for (int i = 0; i < size; i++) {
- if (arr[i] == x) return i;
- }
- return -1;
- }
- int getSize()
- {
- return size;
- }
- int setSize(int newSize) {
- if (newSize < 0) {
- throw NegativeSizeException();
- }
- if (newSize> cap) {
- reSize(newSize);
- }
- else size = newSize;
- }
- void deletePos(int pos) {
- if (pos != -1) {
- for (int i = pos; i < size; i++) {
- arr[i] = arr[i + 1];
- }
- size -= 1;
- }
- }
- void deleteElem(double x) {
- deletePos(getPos(x));
- }
- void append(double x) {
- if (size == cap) {
- reSize(size + 1);
- }
- arr[size] = x;
- size += 1;
- }
- void insert(double x, int pos) {
- reSize(size + 1);
- for (int i = size; i> pos; i--) arr[i] = arr[i - 1];
- arr[pos] = x;
- }
- void set(double x, int pos) {
- if (pos >size - 1) {
- reSize(size + 2);
- }
- arr[pos] = x;
- }
- ~DinArr() {
- size = cap = 0;
- delete[] arr;
- cout << "Destroed DinArr!" << endl;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement