设计一个整型数组类,能够通过[]下标的形式访问数组的某个元素,如果越界输出错误提示。(pushback方法可以在数组的末尾增加数据,此时如果数组容量不足,能够自动扩容,确保正确保存数据。)
时间: 2024-05-14 13:14:54 浏览: 76
下面是一个示例代码,实现了上述要求。
```c++
#include <iostream>
using namespace std;
class IntArray {
private:
int* data;
int size;
int capacity;
public:
IntArray(int initCapacity = 10) {
data = new int[initCapacity];
size = 0;
capacity = initCapacity;
}
~IntArray() {
delete[] data;
}
int& operator[](int index) {
if (index < 0 || index >= size) {
cout << "Error: Index out of range!" << endl;
exit(1);
}
return data[index];
}
void pushback(int value) {
if (size == capacity) {
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;
size++;
}
};
int main() {
IntArray arr(5);
arr.pushback(1);
arr.pushback(2);
arr.pushback(3);
arr.pushback(4);
arr.pushback(5);
arr.pushback(6);
cout << arr[0] << endl;
cout << arr[5] << endl; // should output error message
return 0;
}
```
下面是代码的解释:
- `IntArray` 类包含三个私有成员变量:`data` 用于存储整型数组的数据,`size` 表示数组的大小,`capacity` 表示数组的容量(即能够容纳的元素个数)。
- `IntArray` 类的构造函数可以接受一个初始容量参数,默认为 10。在构造函数中,我们使用 `new` 运算符为 `data` 分配内存空间,并将 `size` 和 `capacity` 初始化为 0 和初始容量。
- `IntArray` 类的析构函数用于释放 `data` 占用的内存空间,避免内存泄漏。
- `IntArray` 类重载了 `[]` 运算符,使得可以通过下标的形式访问数组元素。在 `[]` 运算符中,我们首先检查下标是否越界,如果越界则输出错误提示并退出程序;否则返回对应元素的引用。
- `IntArray` 类提供了 `pushback` 方法,用于在数组末尾插入一个元素。如果数组容量不足,会自动扩容,确保能够正确保存数据。在 `pushback` 方法中,我们首先检查数组是否已满,如果已满则分配一个容量为原来两倍的新数组,并将原数组中的元素拷贝到新数组中;然后将新元素插入到数组末尾,并将 `size` 加 1。
- 在 `main` 函数中,我们创建了一个初始容量为 5 的 `IntArray` 对象 `arr`,并通过 `pushback` 方法向其中插入了 6 个元素。然后我们通过 `[]` 运算符访问了数组中的元素,其中第二个访问操作越界,会输出错误提示信息。
阅读全文