Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Реализация push_back для вектора

#cpp #vector


Мне  нужно написать реализацию push_back для вектора. Но я не  знаю как правильно.

template 
void Vector::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;
}


У меня есть  3  переменные

 private:
     size_t mSize;
     size_t mCapacity;
     T* mVector;


Переделала:

template 
void Vector::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;
}

    


Ответы

Ответ 1



Набросок: if (mSize == mCapacity) { // Выделить новый массив tmp размером mCapacity*2 // Перенести в него всю информацию из старого массива // Удалить старый и присвоить новый ( delete[] mVector; mVector = tmp) // Не забыть обновить mCapacity = mCapacity*2 } mVector[mSize++] = value; Примерно так.

Комментариев нет:

Отправить комментарий