aboutsummaryrefslogtreecommitdiff
path: root/week01/Exercise2.cpp
blob: 7d9d9b3cc27067fac849d17899e3134d1c8c35f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>

struct DynamicIntArray {
	int* arrayPointer;
	int allocatedSize;
	int elementsCount;
};

void resize(DynamicIntArray& dynarr) {
	int* biggerArray = new int[dynarr.allocatedSize * 2];

	for (int i = 0; i < dynarr.elementsCount; i++) {
		biggerArray[i] = dynarr.arrayPointer[i];
	}

	delete[] dynarr.arrayPointer;
	dynarr.arrayPointer = biggerArray;
	dynarr.allocatedSize *= 2;
}

void addToEnd(DynamicIntArray& dynarr, int newElem) {
	if (dynarr.allocatedSize == dynarr.elementsCount) {
		resize(dynarr);
	}

	dynarr.arrayPointer[dynarr.elementsCount++] = newElem;
}

int main() {
	DynamicIntArray mydynarr = { new int[2], 2, 0 };
	addToEnd(mydynarr, 18);
	addToEnd(mydynarr, 6);
	addToEnd(mydynarr, 100);
	addToEnd(mydynarr, -773);
	addToEnd(mydynarr, 840);
	addToEnd(mydynarr, -1000);

	resize(mydynarr);

	std::cout << mydynarr.allocatedSize << " " << mydynarr.elementsCount << std::endl;
	for (int i = 0; i < mydynarr.elementsCount; i++) {
		std::cout << mydynarr.arrayPointer[i] << " ";
	}

	delete[] mydynarr.arrayPointer;
}