编写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-12-03 15:44:08 浏览: 86
下面是代码实现:
```cpp
#include <iostream>
#include <algorithm>
#include <cstring>
template<class T>
class DynamicArray {
public:
/* 构造函数 */
DynamicArray() {
m_len = 10;
m_size = 0;
m_data = new T[m_len];
}
/* 析构函数 */
~DynamicArray() {
delete[] m_data;
}
/* 添加元素 */
void AddItems(T aData[], int aLen) {
if(m_size + aLen > m_len) { // 需要扩展数组长度
while(m_size + aLen > m_len) {
m_len *= 2;
}
T* new_data = new T[m_len];
memcpy(new_data, m_data, sizeof(T) * m_size);
delete[] m_data;
m_data = new_data;
}
memcpy(m_data + m_size, aData, sizeof(T) * aLen); // 复制数据到数组末尾
m_size += aLen;
}
/* 删除元素 */
bool RemoveAt(int index) {
if(index < 0 || 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_len) { // 需要扩展数组长度
m_len *= 2;
T* new_data = new T[m_len];
memcpy(new_data, m_data, sizeof(T) * index);
new_data[index] = aData;
memcpy(new_data + index + 1, m_data + index, sizeof(T) * (m_size - index));
delete[] m_data;
m_data = new_data;
} else {
for(int i = m_size; i > index; i--) {
m_data[i] = m_data[i - 1];
}
m_data[index] = aData;
}
m_size++;
}
/* 排序 */
void mySort() {
std::sort(m_data, m_data + m_size);
}
private:
int m_len; // 数组长度
int m_size; // 元素个数
T* m_data; // 数据指针
};
/* 测试 */
int main() {
DynamicArray<int> int_arr;
int arr1[] = {1, 3, 5};
int_arr.AddItems(arr1, 3);
int_arr.InsertItem(1, 2);
int_arr.RemoveAt(3);
int_arr.mySort();
for(int i = 0; i < int_arr.size; i++) {
std::cout << int_arr[i] << " ";
}
std::cout << std::endl;
DynamicArray<double> double_arr;
double arr2[] = {1.5, 3.5, 2.5};
double_arr.AddItems(arr2, 3);
double_arr.InsertItem(1, 2.5);
double_arr.RemoveAt(3);
double_arr.mySort();
for(int i = 0; i < double_arr.size; i++) {
std::cout << double_arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)