Увеличить емкость для вектора

Отказ от ответственности 1 — я новичок в программировании
Отказ от ответственности 2 — Я искал и искал, но не могу найти помощь, которую я ищу.

Для проекта я более или менее переписываю векторный класс в более урезанной форме. Часть, с которой я зависаю — это написание метода push_back. Все хорошо, пока я не увеличу емкость массива.

Я предполагаю, что нужно сделать, это создать новый вектор с увеличенным размером, а затем скопировать элементы из старого вектора в новый, а затем с помощью оператора присваивания назначить oldVector для newVector.

Я либо неправильно написал метод push_back, либо неправильно перегрузил оператор =, либо мне просто не хватает понимания того, что должно происходить. Любая помощь будет принята с благодарностью.

При компиляции я получаю ошибку «lvalue требуется как левый операнд присваивания» в строке, где я присваиваю this = tempV

template <class T>
Vector<T>& Vector<T>::operator = (const Vector<T> & v)
{
int newSize = v.size();
int newCapacity = v.getCapacity();
data = new T[newCapacity];
for(int i = 0; i < newSize; i++)
data[i] = v.data[i];
return *this;
}

template <class T>
void Vector <T> :: push_back(const T & number)
{
if(numItems == capacity)
{
Vector <T> tempV(this->capacity * 2);
for(int i = 0; i < numItems; i++)
tempV.data[i] = data[i];
*this = tempV;
}
if(numItems < capacity)
data[numItems++] = number;
}

ОБНОВИТЬ
Итак, я понимаю, почему мой код не компилируется при использовании

*this = tempV;

в моем методе копирования я использовал v.size, а не v.size () в качестве метода. После исправления код компилируется и запускается, однако емкость моего вектора такая же и не увеличилась, как я ожидал. Я все еще что-то упускаю. Код выше был обновлен.

Еще раз спасибо за любую помощь!

0

Решение

Почему вы должны создать новый Vector<T>? Просто создайте новый массив:

template <class T>
void Vector <T> :: push_back(const T & number)
{
if(numItems == capacity)
{
capacity *= 2;
T* newData = new T[capacity];
std::copy(data, data + numItems, newData);
delete[] data;
data = newData;
}

data[numItems++] = number;
}
2

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