下面是C++实现动态数组的完整攻略,包含以下几个步骤:
- 定义动态数组类
- 实现构造函数和析构函数
- 实现添加元素、删除元素和获取元素个数的方法
- 实现动态扩容功能
1. 定义动态数组类
我们可以使用C++的类来定义动态数组,代码如下:
template<typename T>
class DynamicArray {
private:
T *array; // 动态数组
int size; // 数组大小
int capacity; // 数组容量
public:
DynamicArray(); // 构造函数
~DynamicArray(); // 析构函数
void add(T value); // 添加元素
void remove(int index); // 删除元素
T get(int index); // 获取元素
int getSize(); // 获取元素个数
};
这里使用了模板类typename T,表示可以存放任何类型的元素。
2. 实现构造函数和析构函数
在构造函数中,我们需要为数组分配一定的内存空间,一般情况下可以初始化为一个较小的值,例如10。在析构函数中,我们需要释放数组的内存空间,避免内存泄露。
template<typename T>
DynamicArray<T>::DynamicArray() {
size = 0;
capacity = 10; // 初始容量为10
array = new T[capacity];
}
template<typename T>
DynamicArray<T>::~DynamicArray() {
delete[] array;
}
3. 实现添加元素、删除元素和获取元素个数的方法
添加元素方法add()的实现要点是,当数组大小达到容量时需要扩充数组的容量。一般的做法是,创建一个新的数组,容量是原数组的两倍,然后将原来的元素拷贝到新的数组中,并释放原来数组的内存空间。
删除元素方法remove()的实现要点是,删除某个元素之后,需要将数组后面的元素向前移动一个位置。
获取元素个数方法getSize()的实现比较简单,直接返回数组的大小即可。
template<typename T>
void DynamicArray<T>::add(T value) {
if (size == capacity) { // 当数组大小达到容量时需要扩充数组的容量
T *newArray = new T[capacity * 2];
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
}
delete[] array;
array = newArray;
capacity = capacity * 2;
}
array[size++] = value; // 添加新元素,并增加数组大小
}
template<typename T>
void DynamicArray<T>::remove(int index) {
for (int i = index; i < size - 1; i++) {
array[i] = array[i + 1];
}
size--; // 减少数组大小
}
template<typename T>
T DynamicArray<T>::get(int index) {
return array[index];
}
template<typename T>
int DynamicArray<T>::getSize() {
return size;
}
4. 实现动态扩容功能
动态扩容功能要点是,当数组达到容量时,需要将数组的容量扩大一倍。我们可以在添加元素时判断数组大小是否达到容量,如果是,就进行动态扩容操作。示例代码如下:
DynamicArray<int> arr;
for (int i = 0; i < 20; i++) {
arr.add(i);
}
std::cout << "Size: " << arr.getSize() << std::endl;
for (int i = 0; i < 20; i++) {
std::cout << arr.get(i) << " ";
}
std::cout << std::endl;
上面的代码创建了一个动态数组,然后添加了20个元素。由于容量大小默认为10,所以当添加到第11个元素时,数组会进行动态扩容,容量为20。最后输出数组的大小和所有元素的值。
另一个示例是删除元素。如果数组使用静态容量,删除元素可能会导致内存浪费,因为删除元素后数组大小没有变化,但空间已经分配出去。动态数组可以避免这个问题。示例代码如下:
DynamicArray<int> arr;
for (int i = 0; i < 20; i++) {
arr.add(i);
}
arr.remove(5); // 删除第6个元素
std::cout << "Size: " << arr.getSize() << std::endl;
for (int i = 0; i < arr.getSize(); i++) {
std::cout << arr.get(i) << " ";
}
std::cout << std::endl;
这段代码创建了一个动态数组,然后添加了20个元素。接着删除第6个元素,输出数组的大小和所有元素的值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现动态数组功能 - Python技术站