编写c++代码,采用模板技术设计动态数组类 DynamicArray,可以实现增加、修改、删除、查询等功能
时间: 2023-12-29 10:02:24 浏览: 94
好的,下面是我为您编写的代码:
```cpp
#include <iostream>
using namespace std;
template <class T>
class DynamicArray {
private:
T* arr;
int size;
public:
DynamicArray() : arr(NULL), size(0) {}
DynamicArray(int n) : size(n) {
arr = new T[n];
}
~DynamicArray() {
if(arr != NULL) {
delete[] arr;
}
}
void resize(int n) {
T* temp_arr = new T[n];
for(int i = 0; i < min(n, size); ++i) {
temp_arr[i] = arr[i];
}
if(arr != NULL) {
delete[] arr;
}
arr = temp_arr;
size = n;
}
T& operator[](int index) {
if(index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
return arr[index];
}
const T& operator[](int index) const {
if(index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
return arr[index];
}
int getSize() const {
return size;
}
void pushBack(const T& value) {
resize(size + 1);
arr[size - 1] = value;
}
void popBack() {
resize(size - 1);
}
void insert(int index, const T& value) {
if(index < 0 || index > size) {
throw out_of_range("Index out of range");
}
resize(size + 1);
for(int i = size - 1; i > index; --i) {
arr[i] = arr[i - 1];
}
arr[index] = value;
}
void erase(int index) {
if(index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
for(int i = index + 1; i < size; ++i) {
arr[i - 1] = arr[i];
}
resize(size - 1);
}
int find(const T& value) const {
for(int i = 0; i < size; ++i) {
if(arr[i] == value) {
return i;
}
}
return -1;
}
};
int main() {
DynamicArray<int> arr(5);
for(int i = 0; i < arr.getSize(); ++i) {
arr[i] = i;
}
arr.pushBack(5);
arr.popBack();
arr.insert(2, 10);
arr.erase(3);
for(int i = 0; i < arr.getSize(); ++i) {
cout << arr[i] << " ";
}
cout << endl;
cout << arr.find(3) << endl;
cout << arr.find(5) << endl;
return 0;
}
```
这是一个动态数组类 DynamicArray,使用模板技术,可以存储任意类型的数据。其中,resize() 方法用于调整数组大小,pushBack() 和 popBack() 方法用于在数组末尾添加或删除元素,insert() 和 erase() 方法用于在指定位置插入或删除元素,find() 方法用于查找指定元素在数组中的位置。
阅读全文