c++用array模板定义一个二维数组
时间: 2024-05-25 07:01:36 浏览: 134
template<typename T, size_t ROWS, size_t COLS>
class Array2D {
public:
Array2D() { }
T& operator()(size_t row, size_t col) { return data[row][col]; }
const T& operator()(size_t row, size_t col) const { return data[row][col]; }
private:
T data[ROWS][COLS];
};
相关问题
C++中如何建立动态二维数组
在 C++ 中,你可以使用 `std::vector` 或 `std::array` 结合模板来创建动态二维数组。这里分别介绍这两种方式:
1. 使用 `std::vector`:
```cpp
// 定义二维向量
std::vector<std::vector<int>> dynamicArray; // 默认初始为空
// 如果需要指定大小,可以这样做
int rows = 3, cols = 4;
dynamicArray.resize(rows);
for (int i = 0; i < rows; ++i) {
dynamicArray[i].resize(cols); // 内部也是动态分配的空间
}
// 后续可以根据需要添加元素
dynamicArray[0][0] = 1;
```
2. 使用 `std::array`:
`std::array` 只支持固定大小,如果需要动态调整大小,你需要配合指针或动态内存管理:
```cpp
// 定义动态数组(注意这只是数组引用,不是真正的二维数组)
std::array<std::array<int, 4>, 3> dynamicArray;
// 但是可以通过指针间接操作 "模拟" 二维数组
int** arr = new int*[rows];
for (int i = 0; i < rows; ++i) {
arr[i] = new int[cols]; // 动态分配空间
}
// 之后的操作类似
arr[0][0] = 1;
// 注意,记得在不再使用时手动释放内存
for (int i = 0; i < rows; ++i) {
delete[] arr[i];
}
delete[] arr;
```
注意:在实际项目中,推荐使用 `std::vector` 因为它的灵活性更高,更易于管理。
二维数组形式的类模板怎么定义且输入输出
定义一个二维数组形式的类模板,可以使用如下的代码:
```c++
template<typename T, int rows, int cols>
class Array2D
{
private:
T data[rows][cols];
public:
Array2D() {}
T* operator[](int row)
{
return data[row];
}
const T* operator[](int row) const
{
return data[row];
}
void print() const
{
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < cols; ++j)
{
std::cout << data[i][j] << " ";
}
std::cout << std::endl;
}
}
};
```
该类模板使用两个非类型模板参数 `rows` 和 `cols` 分别表示二维数组的行数和列数,使用 `T` 表示数组元素的类型。该类模板中重载了 `[]` 运算符,可以用于访问二维数组中的元素。同时,还提供了一个 `print()` 成员函数,用于输出二维数组中的元素。
使用该类模板可以定义一个二维数组对象,例如:
```c++
Array2D<int, 3, 4> arr;
```
这将定义一个行数为 3,列数为 4,元素类型为 `int` 的二维数组对象 `arr`。可以使用 `[]` 运算符访问该数组中的元素,例如:
```c++
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
```
可以使用 `print()` 成员函数输出该数组中的元素,例如:
```c++
arr.print();
```
输出结果为:
```
1 2 0 0
3 4 0 0
0 0 0 0
```
阅读全文