使用模板和动态内存分配实现可变长数组,用c++
时间: 2024-03-11 11:50:08 浏览: 66
好的,我可以为您提供一个使用模板和动态内存分配实现可变长数组的示例代码:
```c++
#include <iostream>
template <typename T>
class DynamicArray {
private:
T* m_arr; // 指向动态分配数组的指针
int m_size; // 数组大小
public:
DynamicArray() : m_arr(nullptr), m_size(0) {}
// 析构函数
~DynamicArray() {
if (m_arr != nullptr) {
delete[] m_arr;
m_arr = nullptr;
m_size = 0;
}
}
// 获取数组大小
int size() const {
return m_size;
}
// 添加元素
void add(const T& val) {
T* temp = new T[m_size + 1]; // 分配新的数组
for (int i = 0; i < m_size; ++i) {
temp[i] = m_arr[i]; // 复制旧数组元素
}
temp[m_size] = val; // 添加新元素
++m_size;
delete[] m_arr; // 释放旧数组
m_arr = temp; // 指向新数组
}
// 获取元素
T& operator[](int index) {
return m_arr[index];
}
};
int main() {
DynamicArray<int> arr;
arr.add(1);
arr.add(2);
arr.add(3);
std::cout << "Array size: " << arr.size() << std::endl;
std::cout << "Array values: ";
for (int i = 0; i < arr.size(); ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
在上面的示例代码中,我们定义了一个类 `DynamicArray`,它使用模板和动态内存分配实现可变长数组。该类包含一个指向动态分配数组的指针 `m_arr`,以及数组大小 `m_size`。在添加元素时,我们首先分配一个新的数组,将旧数组中的元素复制到新数组中,然后添加新元素。最后,我们释放旧数组并将指针指向新数组。这样,我们就可以实现动态数组的大小调整。
阅读全文