c++设计一个类模板 Array,用来实现可以任意指定下标范围的任意类型的 数组。
时间: 2024-03-26 19:39:21 浏览: 92
好的,那么我为您设计一个类模板 Array,它可以实现任意指定下标范围的任意类型的数组,以下是示例代码:
```cpp
#include <iostream>
#include <stdexcept>
template <typename T, int start_index, int end_index>
class Array {
public:
Array() {
for (int i = start_index; i <= end_index; ++i) {
data_[i - start_index] = T{};
}
}
T& operator[](int index) {
if (index < start_index || index > end_index) {
throw std::out_of_range("Index out of range");
}
return data_[index - start_index];
}
void print() const {
std::cout << "[ ";
for (int i = start_index; i <= end_index; ++i) {
std::cout << data_[i - start_index] << " ";
}
std::cout << "]" << std::endl;
}
private:
T data_[end_index - start_index + 1];
};
```
这个类模板以 T 作为存储数据的类型,以 start_index 作为数组的起始下标,以 end_index 作为数组的结束下标。它重载了 [] 运算符,使得可以使用下标访问数组元素,同时进行边界检查。如果下标越界,则抛出 std::out_of_range 异常。
使用方法如下:
```cpp
int main() {
Array<int, -2, 2> arr;
arr.print();
// 输出:[ 0 0 0 0 0 ]
arr[0] = 1;
arr[-2] = 2;
arr[2] = 3;
arr.print();
// 输出:[ 2 0 1 0 3 ]
return 0;
}
```
在这个示例中,我们创建了一个起始下标为 -2,结束下标为 2 的整型数组,并对其进行了赋值和输出。输出结果为:
```
[ 0 0 0 0 0 ]
[ 2 0 1 0 3 ]
```
希望能对你有所帮助!
阅读全文