From 7b19cabee8b08478f31f6e4594ed28e1d04e153c Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 10 May 2024 10:10:21 +0300 Subject: [w11] Solved exercises --- week11/Exercise09/MixedConcat.hpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 week11/Exercise09/MixedConcat.hpp (limited to 'week11/Exercise09/MixedConcat.hpp') diff --git a/week11/Exercise09/MixedConcat.hpp b/week11/Exercise09/MixedConcat.hpp new file mode 100644 index 0000000..2b43f80 --- /dev/null +++ b/week11/Exercise09/MixedConcat.hpp @@ -0,0 +1,34 @@ +#pragma once +#include "MixedArray.hpp" + +template +class MixedConcat : public MixedArray { +public: + virtual MixedArray* operator+=(const MixedArray* other) override; +}; + +template +MixedArray* MixedConcat::operator+=(const MixedArray* other) { + T* biggerFirst = new T[this->allocated + other->allocated]; + U* biggerSecond = new U[this->allocated + other->allocated]; + + for (int i = 0; i < this->size + other->size; i++) { + if (i % 2 == 0) { + biggerFirst[i] = this->first[i / 2]; + biggerSecond[i] = this->second[i / 2]; + } + else { + biggerFirst[i] = other->first[(i - 1) / 2]; + biggerSecond[i] = other->second[(i - 1) / 2]; + } + } + + delete[] this->first; + this->first = biggerFirst; + delete[] this->second; + this->second = biggerSecond; + this->allocated += other->allocated; + this->size += other->size; + + return this; +} -- cgit v1.2.3