用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();
时间: 2023-11-27 18:53:26 浏览: 247
下面是动态数组类 DynamicArray 的实现,包含基本要求和功能:
```cpp
#include <iostream>
#include <string.h>
using namespace std;
template<class T>
class DynamicArray {
private:
int length; // 数组长度
int count; // 元素个数
T* data; // 数据指针
public:
// 构造函数
DynamicArray(int len = 10) {
length = len;
count = 0;
data = new T[length];
}
// 析构函数
~DynamicArray() {
delete[] data;
}
// 追加数组元素
void AddItems(T aData[], int aLen) {
if (count + aLen > length) {
length = (count + aLen) * 2;
T* newData = new T[length];
memcpy(newData, data, sizeof(T) * count);
delete[] data;
data = newData;
}
memcpy(data + count, aData, sizeof(T) * aLen);
count += aLen;
}
// 删除数据元素
bool RemoveAt(int index) {
if (index < 0 || index >= count) {
return false;
}
for (int i = index; i < count - 1; i++) {
data[i] = data[i + 1];
}
count--;
return true;
}
// 插入数组元素
void InsertItem(int index, T aData) {
if (count == length) {
length *= 2;
T* newData = new T[length];
memcpy(newData, data, sizeof(T) * count);
delete[] data;
data = newData;
}
for (int i = count; i > index; i--) {
data[i] = data[i - 1];
}
data[index] = aData;
count++;
}
// 数组元素排序
void mySort() {
for (int i = 0; i < count - 1; i++) {
for (int j = i + 1; j < count; j++) {
if (data[i] > data[j]) {
T temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
// 获取数组长度
int GetLength() {
return length;
}
// 获取元素个数
int GetCount() {
return count;
}
// 获取数据指针
T* GetData() {
return data;
}
};
```
使用示例:
```cpp
int main() {
DynamicArray<int> arr(5);
int data[] = { 1, 3, 5, 2, 4 };
arr.AddItems(data, 5);
arr.mySort();
int* ptr = arr.GetData();
for (int i = 0; i < arr.GetCount(); i++) {
cout << ptr[i] << " ";
}
cout << endl;
arr.RemoveAt(2);
arr.InsertItem(1, 6);
ptr = arr.GetData();
for (int i = 0; i < arr.GetCount(); i++) {
cout << ptr[i] << " ";
}
cout << endl;
DynamicArray<string> strArr(3);
string strData[] = { "hello", "world", "!" };
strArr.AddItems(strData, 3);
strArr.mySort();
string* strPtr = strArr.GetData();
for (int i = 0; i < strArr.GetCount(); i++) {
cout << strPtr[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果:
```
1 2 3 4 5
1 6 2 4 5
! hello world
```
阅读全文