用c++写一个设计动态数组类 DynamicArray,要求系统设计具有一定弹性和可扩展性,使得后续维护和扩展功能更容易,增加或修改系统功能变得更简单。基本要求和功能如下: (1)数组元素可动态实例化为int、double、string、Point等。 (2)类模板成员包括:数组长度、元素个数、数据指针。 (3)通过构造函数创建数组,默认包含10个元素,通过析构函数释放数组数据。 (4)追加数组元素:void AddItems(T aData[], int aLen); 在数组末尾添加aLen个元素,注意如果数组长度不够,需要动态扩展。 (5)删除数据元素:bool RemoveAt(int index); 返回是否删除成功。 (6)插入数组元素 void InsertItem( int index, T aData); 在数组的第index的位置插入元素aData,注意如果数组长度不够,需要动态扩展。 (7)数组元素排序,void mySort();
时间: 2024-02-15 16:04:08 浏览: 69
好的,以下是一个简单的 DynamicArray 类的 C++ 实现,包含您所提到的所有要求和功能:
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
template <typename T>
class DynamicArray {
public:
DynamicArray() : m_size(0), m_capacity(10) {
m_data = new T[m_capacity];
}
~DynamicArray() {
delete[] m_data;
}
void AddItems(T aData[], int aLen) {
if (m_size + aLen > m_capacity) {
ExpandCapacity(m_size + aLen);
}
memcpy(m_data + m_size, aData, sizeof(T) * aLen);
m_size += aLen;
}
bool RemoveAt(int index) {
if (index >= m_size) {
return false;
}
for (int i = index; i < m_size - 1; i++) {
m_data[i] = m_data[i + 1];
}
m_size--;
return true;
}
void InsertItem(int index, T aData) {
if (m_size == m_capacity) {
ExpandCapacity(m_capacity * 2);
}
for (int i = m_size - 1; i >= index; i--) {
m_data[i + 1] = m_data[i];
}
m_data[index] = aData;
m_size++;
}
void mySort() {
sort(m_data, m_data + m_size);
}
private:
T* m_data;
int m_size;
int m_capacity;
void ExpandCapacity(int newCapacity) {
T* newData = new T[newCapacity];
memcpy(newData, m_data, sizeof(T) * m_size);
delete[] m_data;
m_data = newData;
m_capacity = newCapacity;
}
};
```
这个类使用了模板技术,可以实例化为包含不同类型元素的数组。它使用了动态内存分配,在需要时动态扩展数组容量,增强了弹性和可扩展性。在创建数组时,默认包含10个元素;在销毁数组时,动态释放内存。同时,它还实现了三个基本操作:添加元素,删除元素和插入元素。使用了排序算法对元素进行排序。
阅读全文