Я не знаю, как спроектировать функцию для работы с динамическим массивом - PullRequest
0 голосов
/ 11 октября 2019

Итак, я должен написать несколько функций в классе с именем ArrayList. Я просто не знаю, с чего начать или как управлять динамическим массивом. Защищенные члены класса:

protected:

int *m_list; ///< Pointer to dynamic array.

std::size_t m_capacity; ///< Physical size of dynamic array.

std::size_t m_size; ///< Number of array elements in use.


    /// @brief Appends the given element @p value to the end of the container.
    /// The new element is initialized as a copy of @p value.
    /// If size() == capacity(), the container's size is increased to hold
    /// an additional 16 elements. If the new size() is greater than
    /// capacity(), then all references are invalidated.
    /// @param value The value of the element to append.

    void push_back(const int& value);




    /// @brief Remove unused capacity. All iterators, including the past the
    /// end iterator, and all references to the elements are invalidated.

    void shrink_to_fit();

void ArrayList::shrink_to_fit()
{

}

void ArrayList::push_back(const int& value)
{

}

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

В shrink_to_fit вам нужно изменить размер динамически выделенной памяти, а в push_back вам иногда нужно увеличить выделенную память.

Итак, один важный фрагмент кода, который вам понадобится, - это функция изменения размера, которая будет выполнять следующее:

  1. определяет необходимую новую емкость. В shrink_to_fit новая емкость, очевидно, size. Если вам необходимо изменить размер в push_back, возможно, вы захотите увеличить емкость не только на 1, чтобы уменьшить количество раз, которое вам нужно изменить.
  2. выделите память требуемой емкости, используя new. Например, auto temp = new int[newCapacity];
  3. Скопируйте все существующие элементы из m_list в temp, используя цикл, или memcpy.
  4. удалите старую память, используя delete[] m_list;
  5. настроить локальные переменные: capacity = newCapacity и m_list = temp.

Это самая сложная часть работы с динамической памятью, и я надеюсь, что это поможет вам начать работу.

0 голосов
/ 11 октября 2019

Вам потребуется динамическое выделение памяти, используя new/delete или malloc/free для обработки этих методов. Начните с выделения памяти для 16 целых чисел, добавив их в m_list как связанный список.

...