在示例中,DynamicArray
类使用了一个底层的静态数组,而 push_back
方法用于向动态数组添加元素,根据需要扩展容量。 getSize
方法返回数组的当前大小,而 operator[]
用于访问指定索引的元素。在析构函数中释放了分配的内存。
这个示例只是一个简单的实现,用于演示动态数组的基本概念。在实际应用中,需要考虑更多的细节,如内存管理、异常处理、性能优化等。在C++标准库中,可以使用 std::vector
来获得一个更强大和高效的动态数组实现。
#include <iostream>
#include <stdexcept>
class DynamicArray {
public:
DynamicArray() : data(nullptr), size(0), capacity(0) {}
// 添加元素到动态数组
void push_back(int value) {
if (size == capacity) {
// 如果当前大小已经达到容量上限,需要扩展容量
int new_capacity = (capacity == 0) ? 1 : capacity * 2;
int* new_data = new int[new_capacity];
// 复制现有数据到新内存块
for (int i = 0; i < size; ++i) {
new_data[i] = data[i];
}
// 释放旧内存块
delete[] data;
// 更新指针和容量
data = new_data;
capacity = new_capacity;
}
// 在动态数组末尾添加元素
data[size] = value;
size++;
}
// 获取动态数组的大小
int getSize() const {
return size;
}
// 获取指定索引的元素
int operator[](int index) const {
if (index < 0 || index >= size) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
// 析构函数,释放内存
~DynamicArray() {
delete[] data;
}
private:
int* data; // 底层静态数组
int size; // 当前大小
int capacity; // 当前容量
};
int main() {
DynamicArray arr;
for (int i = 0; i < 10; ++i) {
arr.push_back(i * 2);
}
std::cout << "Dynamic Array Size: " << arr.getSize() << std::endl;
for (int i = 0; i < arr.getSize(); ++i) {
std::cout << "Element at index " << i << ": " << arr[i] << std::endl;
}
return 0;
}