Я бы предложил сделать небольшие шаги, поскольку вы новичок в C ++. Большая часть вашего синтаксиса неверна, и я чувствую, что вам лучше бы иметь какой-нибудь минимальный класс, который на самом деле компилируется, прежде чем беспокоиться о копировании элементов и определении размеров массивов. Но так как у вас это далеко, вот несколько общих советов (очевидно, я не буду писать правильный код для вас, так как это домашняя работа):
Вы используете T
взаимозаменяемо как ваш содержащийся тип и тип массива. На самом деле вызов new T[x]
дает вам указатель на t, т.е. T*
. Вы должны понимать разницу между ними, чтобы выучить C или C ++.
Ваша функция ensureCapacity
принимает два аргумента. Вы не должны принимать переменную-член m_array
в качестве аргумента - она на самом деле не будет делать то, что вы ожидаете здесь (для бонусных баллов подумайте, что она будет делать ). Также подумайте, имеет ли смысл minimumCapacity
быть также T
.
Вы выделяете два новых массива в ensureCapacity
и никогда delete
ничего. Помните, что это C ++, и вы должны как-то освободить память. Кроме того, вам действительно нужен только один новый, больший массив - я думаю, что здесь может быть небольшая путаница вокруг разницы между T
и T*
в том, как вы можете поменять их местами.
Вы уверены в сравнении m_array[m_size] < minimumCapacity
? Что вы здесь сравниваете и почему?
Надеюсь, это поможет. Опять же, я предлагаю вам попытаться разобраться с основными понятиями языка (которые, по общему признанию, более хитры, чем многие другие), прежде чем слишком сильно беспокоиться о логике изменения размера массива - возможно, начните с очень простого класса с массивом фиксированного размера и двигаясь вперед оттуда.