aboutsummaryrefslogtreecommitdiff
path: root/week01/Exercise2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'week01/Exercise2.cpp')
-rw-r--r--week01/Exercise2.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/week01/Exercise2.cpp b/week01/Exercise2.cpp
new file mode 100644
index 0000000..7d9d9b3
--- /dev/null
+++ b/week01/Exercise2.cpp
@@ -0,0 +1,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;
+}