从今天开始,每周周四写一点算法/数据结构相关的内容。
1. 简介
动态数组是容量可以变化的数组,它支持普通数组支持的所有操作,并额外支持扩容操作。
2. 用途
普通数组的容量是固定的,如果使用者不能确定数组将要容纳的元素个数,就无法使用普通数组。动态数组允许使用者随时扩容数组,因此即使使用者不能确定数组将要容纳的元素个数,只需在动态数组容量不足时及时扩容,就可以正常使用数组。
3. 框架
下面给出动态数组的C++实现框架。
template <typename T> struct DynamicArray
{
T * arr; //首地址
int capacity; //当前容量
static const int DEFAULT_CAPACITY = 10; //默认容量
DynamicArray(int capacity = DEFAULT_CAPACITY)
{
arr = new T[this -> capacity = capacity];
}
~DynamicArray()
{
delete[] arr;
}
T & operator[](int index)
{
while (capacity <= index) //一直扩容直到容量大于index
expend();
return arr[index];
}
void expend

本文介绍了动态数组的概念、用途以及C++实现框架。动态数组支持扩容,其扩容策略包括每次扩容固定倍数和固定值。文章对比了两种策略在空间和时间效率上的差异,指出固定倍数策略在时间效率上更优,而固定值策略在空间效率上更优。通过摊还分析,证明了在大量插入操作下,动态数组尾部插入的分摊时间复杂度为O(1)。
最低0.47元/天 解锁文章
7376

被折叠的 条评论
为什么被折叠?



