Как я могу скопировать массив из класса и удвоить размер нового массива?

CDCatalogue::CDCatalogue() //creates array of size 4
{
maxsize=4;
numcds = 0;
cds = new CD[maxsize];
}

Я хочу это скопировать cat в новый массив с двойным размером cat:

CDCatalogue::CDCatalogue(const CDCatalogue& cat)
{}

-5

Решение

Как предлагалось ранее, я бы предпочел использовать std :: vector, который предлагает функцию-член resize () именно для того, что вам нужно. Это, наверное, то, что вы ищете.

Если по какой-то причине вы не можете использовать векторы, возможно, более простой подход, чем использование «конструктора двойного копирования», будет иметь функцию «doubleSize», которую вы можете вызвать сразу после копирования конструкции.

Предполагая, что в вашем примере в вопросе maxsize и cds объявлены как члены класса, вы можете сделать что-то вроде этого:

CDCatalogue::doubleSize() {
unsigned int oldMaxSize = maxsize;
maxsize *= 2;  // You might want to keep an eye for overflows here
CD *oldCds = cds;
cds = (CD*) new CD[maxsize];
std::copy(oldCds, oldCds+oldMaxSize, cds);
delete[] cds;
}

Обратите внимание, что это не так просто, как с использованием векторов, потому что нет никакого «изменения размера» для динамического размещения c ++. Вместо этого вам нужно создать новый массив нового желаемого размера, скопировать элементы старого массива в новый, а затем освободить память старого массива. Обратите внимание, что последняя половина элементов нового массива будет инициализирована с неопределенными значениями.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector