从今天开始,每周周四写一点算法/数据结构相关的内容。
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();
};
4. 扩容
扩容操作的原理很简单,数组的原本容量不足时,只需在内存中重新申请一块更大的空间,并将数组内的所有元素复制到新申请的空间中,就可以获得一个