设计一个动态数组模板,(成员函数包括data和num;data表示动态分配空间的首地址,num为数组大小),成员函数包括构造函数、复制构造函数、析构函数、赋值运算符重载函数、下标运算符重载函数、指针转换运算符重载函数、获取数组容量函数、修改数组容量函数等。利用该数组类模板实现:从键盘输入10个整数,然后对输入的整数按从小到大排序,并输出排序结果。
时间: 2024-03-21 15:37:48 浏览: 135
介绍一个模板动态数组
4星 · 用户满意度95%
好的,以下是动态数组的模板类的实现:
```cpp
template <typename T>
class DynamicArray {
public:
// 构造函数
DynamicArray() {
data = nullptr;
num = 0;
}
// 复制构造函数
DynamicArray(const DynamicArray& other) {
num = other.num;
if (num == 0) {
data = nullptr;
} else {
data = new T[num];
for (int i = 0; i < num; i++) {
data[i] = other.data[i];
}
}
}
// 析构函数
~DynamicArray() {
if (data != nullptr) {
delete[] data;
}
}
// 赋值运算符重载函数
DynamicArray& operator=(const DynamicArray& other) {
if (this != &other) {
if (data != nullptr) {
delete[] data;
}
num = other.num;
if (num == 0) {
data = nullptr;
} else {
data = new T[num];
for (int i = 0; i < num; i++) {
data[i] = other.data[i];
}
}
}
return *this;
}
// 下标运算符重载函数
T& operator[](int index) {
if (index < 0 || index >= num) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
// 指针转换运算符重载函数
operator T*() const {
return data;
}
// 获取数组容量函数
int capacity() const {
return num;
}
// 修改数组容量函数
void resize(int newNum) {
T* newData = new T[newNum];
int copyNum = std::min(num, newNum);
for (int i = 0; i < copyNum; i++) {
newData[i] = data[i];
}
if (data != nullptr) {
delete[] data;
}
data = newData;
num = newNum;
}
private:
T* data;
int num;
};
```
接下来是按从小到大排序的实现:
```cpp
#include <iostream>
#include <algorithm>
int main() {
DynamicArray<int> arr;
arr.resize(10);
for (int i = 0; i < 10; i++) {
std::cin >> arr[i];
}
std::sort(arr, arr + arr.capacity());
for (int i = 0; i < 10; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
这个程序先从键盘输入10个整数,然后使用 `std::sort` 函数对数组进行排序,最后输出排序结果。因为 `DynamicArray` 类实现了指针转换运算符重载函数,所以可以直接将 `arr` 传递给 `std::sort` 函数。
阅读全文