12.c++编写一个动态数组类,包括基本功能:对数组的查找、添加/删除元素、 逆序等功能(可自行添加额外功能)。
时间: 2024-01-21 08:20:13 浏览: 71
C++创建动态数组
下面是一个简单的动态数组类实现,包含了基本的查找、添加/删除元素、逆序等功能:
```c++
#include <iostream>
using namespace std;
class DynamicArray {
private:
int size;
int capacity;
int* data;
public:
DynamicArray(int capacity) {
this->size = 0;
this->capacity = capacity;
this->data = new int[capacity];
}
~DynamicArray() {
delete[] data;
}
int getSize() {
return size;
}
int getCapacity() {
return capacity;
}
bool isEmpty() {
return size == 0;
}
bool isFull() {
return size == capacity;
}
int get(int index) {
if (index < 0 || index >= size) {
cout << "Index out of bounds" << endl;
return -1;
}
return data[index];
}
void set(int index, int value) {
if (index < 0 || index >= size) {
cout << "Index out of bounds" << endl;
return;
}
data[index] = value;
}
void add(int value) {
if (isFull()) {
int* newData = new int[capacity * 2];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity *= 2;
}
data[size++] = value;
}
void insert(int index, int value) {
if (index < 0 || index > size) {
cout << "Index out of bounds" << endl;
return;
}
if (isFull()) {
int* newData = new int[capacity * 2];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity *= 2;
}
for (int i = size; i > index; i--) {
data[i] = data[i - 1];
}
data[index] = value;
size++;
}
void remove(int index) {
if (index < 0 || index >= size) {
cout << "Index out of bounds" << endl;
return;
}
for (int i = index; i < size - 1; i++) {
data[i] = data[i + 1];
}
size--;
}
void reverse() {
for (int i = 0; i < size / 2; i++) {
int temp = data[i];
data[i] = data[size - i - 1];
data[size - i - 1] = temp;
}
}
};
int main() {
DynamicArray arr(5);
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
arr.add(5);
cout << "Original array: ";
for (int i = 0; i < arr.getSize(); i++) {
cout << arr.get(i) << " ";
}
cout << endl;
arr.insert(2, 6);
cout << "After inserting 6: ";
for (int i = 0; i < arr.getSize(); i++) {
cout << arr.get(i) << " ";
}
cout << endl;
arr.remove(3);
cout << "After removing element at index 3: ";
for (int i = 0; i < arr.getSize(); i++) {
cout << arr.get(i) << " ";
}
cout << endl;
arr.reverse();
cout << "After reversing: ";
for (int i = 0; i < arr.getSize(); i++) {
cout << arr.get(i) << " ";
}
cout << endl;
return 0;
}
```
在这个示例中,我们定义了一个 `DynamicArray` 类,它包含了一些基本的成员函数,如获取数组大小、获取数组容量、判断数组是否为空或满、获取指定位置的元素、设置指定位置的元素、添加元素、插入元素、删除元素、逆序等功能。
在 `add` 函数中,当数组已满时,我们将数组的容量增加为原来的两倍,并重新分配内存空间;在 `insert` 函数中,我们先判断插入位置是否合法,再判断数组是否已满,如果已满则扩容,最后将插入位置后面的元素依次向后移动一个位置,并将要插入的元素放到指定位置;在 `remove` 函数中,我们先判断删除位置是否合法,然后将删除位置后面的元素依次向前移动一个位置,并将数组大小减一;在 `reverse` 函数中,我们将数组中的元素倒序排列。
最后,在 `main` 函数中,我们创建了一个 `DynamicArray` 对象,并对它进行了一些基本操作,如添加元素、插入元素、删除元素、逆序等,并输出了每次操作后的结果。
阅读全文