Push back implementation for a vector
I need to write an implementation of push_back
for a vector. But I do not know how to do it correctly.
template <typename T>
void Vector<T>::push_back(const T& value)
{
int* result = new int[mSize];
for (decltype(mSize) i = 0; i < mSize; ++i)
{
if (i != mSize - 1)
{
result[i] = mVector[i];
}
else
{
result[i] = value;
break;
}
}
mVector = result;
}
I have 3 variables
private:
size_t mSize;
size_t mCapacity;
T* mVector;
Redone it:
template <typename T>
void Vector<T>::PushBack(const T& value)
{
if (mSize == mCapacity)
{
size_t capacity = mCapacity * 2;
// Выделить новый массив tmp размером mCapacity*2
T* result = new T[capacity];
// Перенести в него всю информацию из старого массива
for (decltype(mSize) i = 0; i < mSize; ++i)
result[i] = mVector[i];
// Удалить старый и присвоить новый ( delete[] mVector; mVector = tmp)
delete[] mVector;
mVector = result
// Не забыть обновить mCapacity = mCapacity*2
mCapacity = capacity;
}
mVector[mSize++] = value;
}
5
1 answers
Sketch:
if (mSize == mCapacity)
{
// Выделить новый массив tmp размером mCapacity*2
// Перенести в него всю информацию из старого массива
// Удалить старый и присвоить новый ( delete[] mVector; mVector = tmp)
// Не забыть обновить mCapacity = mCapacity*2
}
mVector[mSize++] = value;
Something like this.
4
Author: Harry, 2017-12-25 12:40:49