2016-01-17 1 views
-5
CDCatalogue::CDCatalogue() //creates array of size 4 
{ 
    maxsize=4; 
    numcds = 0; 
    cds = new CD[maxsize]; 
} 

Я хочу, чтобы скопировать cat в новый массив с двойным размером cat:Как я могу скопировать массив из класса и удвоить размер нового массива?

CDCatalogue::CDCatalogue(const CDCatalogue& cat) 
{ 


} 
+0

Простой ответ. Используйте 'std :: vector ' и снимите код, который вы сейчас делаете. – PaulMcKenzie

ответ

0

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

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

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

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++. Вместо этого вам нужно создать новый массив нового желаемого размера, скопировать элементы старого массива в новый и затем выпустить память старого массива. Обратите внимание, что последняя половина элементов нового массива будет инициализирована неопределенными значениями.

Смежные вопросы