这段代码中的array<int,2> dim是什么意思?

3

我在阅读《C++程序设计语言第四版》时遇到了这段代码。

template<class T>
class Matrix {
    array<int,2> dim; // two dimensions

    T∗ elem; // pointer to dim[0]*dim[1] elements of type T

public:
    Matrix(int d1, int d2) :dim{d1,d2}, elem{new T[d1∗d2]} {} // error handling omitted

    int size() const { return dim[0]∗dim[1]; }

    Matrix(const Matrix&); // copy constructor

    Matrix& operator=(const Matrix&); // copy assignment

    Matrix(Matrix&&); // move constructor

    Matrix& operator=(Matrix&&); // move assignment

    ˜Matrix() { delete[] elem; }
    // ...
};

这个类有两个数据成员,其中一个是类型为T的指针。我不理解array< int, 2 > dim 的意思。

3个回答

4
成员变量 dim 存储你的 2D 矩阵 Matrix< T > 的第一维和第二维的大小,这两个大小以 array< int, 2 >(我假设是 std::array< int, 2 >:包含两个 int 类型值的数组)的形式存储。

如果没有这个成员变量 dimMatrix< T > 就不知道其堆分配的数组 elem 包含多少个元素(注意elem 是指向连续元素数组中第一个元素的指针)。因此,Matrix< T > 没有安全地迭代这些元素的方法,因为它不知道何时停止。 (事实上,Matrix< T > 只能执行解除堆栈分配数组的操作,就像在析构函数中一样。) 因此,堆分配数组的大小(即dim[0] * dim[1])也被明确地存储。


3
这里使用了标准库中的std::array。您可以在这里找到详细的参考资料:https://en.cppreference.com/w/cpp/container/array array<int,N> x;声明了一个长度为N的整数数组,而在您的情况下,N为2。
稍后将用它来存储矩阵的形状。

1
这是一个声明成员变量 dim 的类型是 array<int, 2>(可能是 std::array)。请注意保留 HTML 标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接