我不知道如何设计函数来处理动态数组
I don't know how to design the function to work with the dynamic array
所以我应该在 class 中编写一些名为 ArrayList 的函数。我根本不知道从哪里开始或如何使用动态数组进行管理。 class 的受保护成员是:
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)
{
}
您将需要使用 new/delete
或 malloc/free
进行动态内存分配来处理这些方法。首先为 16 个整数分配内存,将它们作为链表附加到 m_list
。
在 shrink_to_fit
中,您需要调整动态分配内存的大小,在 push_back
中,您有时需要增加分配的内存。
因此,您需要的一段重要代码是调整大小函数,它将执行以下操作:
- 确定所需的新容量。在
shrink_to_fit
中,新增容量显然是size
。如果您需要在 push_back
中调整大小,您可能希望增加容量而不只是增加 1,以减少必须调整大小的次数。
- 使用
new
分配所需容量的内存。例如auto temp = new int[newCapacity];
- 使用循环或
memcpy
. 将所有现有项目从 m_list
复制到 temp
- 使用
delete[] m_list;
删除旧内存
- 调整局部变量:
capacity = newCapacity
和m_list = temp
.
这是处理动态内存最难的部分,我希望它能帮助您入门。
所以我应该在 class 中编写一些名为 ArrayList 的函数。我根本不知道从哪里开始或如何使用动态数组进行管理。 class 的受保护成员是:
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)
{
}
您将需要使用 new/delete
或 malloc/free
进行动态内存分配来处理这些方法。首先为 16 个整数分配内存,将它们作为链表附加到 m_list
。
在 shrink_to_fit
中,您需要调整动态分配内存的大小,在 push_back
中,您有时需要增加分配的内存。
因此,您需要的一段重要代码是调整大小函数,它将执行以下操作:
- 确定所需的新容量。在
shrink_to_fit
中,新增容量显然是size
。如果您需要在push_back
中调整大小,您可能希望增加容量而不只是增加 1,以减少必须调整大小的次数。 - 使用
new
分配所需容量的内存。例如auto temp = new int[newCapacity];
- 使用循环或
memcpy
. 将所有现有项目从 - 使用
delete[] m_list;
删除旧内存
- 调整局部变量:
capacity = newCapacity
和m_list = temp
.
m_list
复制到 temp
这是处理动态内存最难的部分,我希望它能帮助您入门。