C++ Zwiększenie rozmiaru dynamicznej tablicy

0

Witam, mam drobny problem z dynamicznym alokowaniem tablicy. Mam w programie zdefiniowany wskaźnik na dynamiczną tablicę wskaźników na obiekty. Już dosyć długo męczę się z funkcjonalnością dodania nowego elementu do tablicy, wiem z teorii, że powinienem zaalokować nową tablicę o rozmiarze o jeden większym niż poprzednia, skopiować elementy i podmienić je miejscami. Kombinowałem już na wszystkie sposoby i każdy kończył się niepowodzeniem, załączam kod, proszę o pomoc z tym problemem.

void Firm::hireSerialWorker()
{
    workersLength++;        
    Worker** tempSerialWorkers = new Worker* [workersLength];
    for(int i = 0; i < workersLength; i++)
    {
        SerialWorker* temp = new SerialWorker();
        temp = workers[i];                   
        tempSerialWorkers[i] = temp;
    }

    workers = tempSerialWorkers;

    countEverything();
}
2

Dlaczego nie użyjesz std::vector? Miałbyś problem z głowy...

2

Dlaczego nie korzystasz z std::vector?

Abstrahując od tego, nie sądzisz, że te 2 linijki obok siebie są bez sensu?

SerialWorker* temp = new SerialWorker();
temp = workers[i];
0

Wiem i to najbardziej mnie boli. To jest część większego projektu na zaliczenie i w formie edukacyjnej taką trudniejszą formę musimy zastosować..

0

zgaduje, że workers masz w klasie... jeśli workers ma workerslenght elementów to wychodzisz poza zakres

3

Gdybym ja miał takie wymaganie to bym zaimplementował osobno odpowiednik wektora, zamiast się męczyć z logiką kontenera w innej klasie. SRP.

W każdym razie, chcesz coś takiego:

Worker * resizedWorkers = new Worker[currentSize+1];
std::copy(workers, workers + currentSize, resizedWorkers);
resizedWorkers[currentSize] = new Worker(...);
currentSize++;
delete[] workers;
workers = resizedWorkers

Płakałem jak to pisałem.

0

Dziękuję wszystkim za odpowiedzi.
@kq Zdaje sobie sprawę, że problem nie należał do trudnych ale nawet nie wiesz jak bardzo mi pomogłeś. Wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1