用c++写 使用模板和动态内存分配实现可变长数组
时间: 2024-03-18 19:42:04 浏览: 81
好的,下面是一个简单的可变长数组的实现,它使用了模板和动态内存分配:
```c++
#include <iostream>
using namespace std;
template <typename T>
class Array {
private:
T* arr;
int size;
public:
Array() : arr(nullptr), size(0) {}
Array(int sz) : arr(new T[sz]), size(sz) {}
~Array() { delete[] arr; }
int getSize() const { return size; }
T& operator[](int index) {
if (index < 0 || index >= size) {
cout << "Index out of range!" << endl;
exit(1);
}
return arr[index];
}
const T& operator[](int index) const {
if (index < 0 || index >= size) {
cout << "Index out of range!" << endl;
exit(1);
}
return arr[index];
}
void resize(int sz) {
if (sz == size) return;
T* tmp = new T[sz];
int n = min(size, sz);
for (int i = 0; i < n; i++) {
tmp[i] = arr[i];
}
delete[] arr;
arr = tmp;
size = sz;
}
};
int main() {
Array<int> a(10);
for (int i = 0; i < a.getSize(); i++) {
a[i] = i;
}
a.resize(20);
for (int i = 0; i < a.getSize(); i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
在上面的代码中,我们定义了一个名为`Array`的模板类。它有一个指向`T`类型的指针`arr`和一个`int`类型的变量`size`,用于存储数组的大小。在构造函数中,我们使用`new`运算符为`arr`分配内存,并将`size`设置为传递给构造函数的值。在析构函数中,我们释放`arr`指向的内存。`getSize()`函数返回数组的大小。
我们还重载了`[]`运算符,以便可以像访问普通数组一样访问可变长数组。`resize()`函数用于调整数组的大小,它首先为新大小分配内存,然后将原始数组中的元素复制到新数组中,最后释放原始数组的内存。
在`main()`函数中,我们创建了一个`Array<int>`类型的对象`a`,并将其大小设置为10。然后,我们使用`[]`运算符向数组中的元素赋值,并使用`resize()`函数将数组的大小增加到20。最后,我们使用`[]`运算符输出数组中的元素,以验证数组大小已成功更改。
阅读全文