动态数组类 DynamicArray
时间: 2023-09-06 15:11:52 浏览: 88
动态数组类(DynamicArray)是一种可以动态增加或减少长度的数组。它的长度可以根据需要进行自动扩展或收缩。动态数组类通常用于需要频繁插入、删除或者动态调整大小的场合。
动态数组类的实现基于静态数组,通过动态申请新的内存空间,将原有的数据复制到新的内存空间中来实现自动扩展或收缩。当数组长度不够时,动态数组类会自动申请更大的内存空间,将原有的数据复制到新的内存空间中,并释放原有的内存空间;当数组长度过长时,动态数组类会自动收缩内存空间,以节省内存使用。
动态数组类的常见操作包括随机访问、插入元素、删除元素、获取数组长度等。具体实现可以使用模板类,支持不同类型的数据。以下是一个简单的动态数组类的示例代码:
```cpp
template<typename T>
class DynamicArray {
private:
T* data;
int capacity; // 当前内存容量
int size; // 实际元素个数
void resize(int new_capacity) {
T* new_data = new T[new_capacity];
for (int i = 0; i < size; i++) {
new_data[i] = data[i];
}
delete[] data;
data = new_data;
capacity = new_capacity;
}
public:
DynamicArray() {
data = new T[1];
capacity = 1;
size = 0;
}
~DynamicArray() {
delete[] data;
}
int getSize() {
return size;
}
T& operator[](int index) {
if (index < 0 || index >= size) {
throw "Index out of range.";
}
return data[index];
}
void add(T item) {
if (size == capacity) {
resize(capacity * 2);
}
data[size++] = item;
}
void insert(int index, T item) {
if (index < 0 || index > size) {
throw "Index out of range.";
}
if (size == capacity) {
resize(capacity * 2);
}
for (int i = size - 1; i >= index; i--) {
data[i + 1] = data[i];
}
data[index] = item;
size++;
}
void remove(int index) {
if (index < 0 || index >= size) {
throw "Index out of range.";
}
for (int i = index; i < size - 1; i++) {
data[i] = data[i + 1];
}
size--;
if (size <= capacity / 4) {
resize(capacity / 2);
}
}
};
```
这是一个基于模板类实现的动态数组类,支持任意类型的数据。它包括了常见的数组操作,如随机访问、添加元素、插入元素、删除元素等。通过动态扩展和收缩内存空间,可以实现数组长度的动态调整。
阅读全文