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

What does array<int,2> dim mean in this piece of code?

提问人:srinivas raman 提问时间:8/15/2018 最后编辑:Deduplicatorsrinivas raman 更新时间:1/10/2022 访问量:3014

问:

我在阅读 c++ 编程语言第 4 版时遇到了这段代码

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; }
    // ...
};

类中有两个数据成员,其中一个是 类型的指针。我不明白是什么意思。Tarray< int, 2 >dim

C++ 数组 C++11 模板 构造函数

评论


答:

1赞 bipll 8/15/2018 #1

它是类型(可能是)的成员变量的声明。dimarray<int, 2>std::array

4赞 Matthias 8/15/2018 #2

成员变量存储 2D 矩阵的第一维和第二维的大小。这两个大小存储为 (我假设 std::array< int, 2 >: 一个包含两个值的数组 )。dimMatrix< T >array< int, 2 >int

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

3赞 QuantSolo 8/15/2018 #3

这是利用标准库中的 std::array。您可以在此处找到详细的参考资料: https://en.cppreference.com/w/cpp/container/array

array<int,N> x;

声明一个长度为 N 的整数数组;在您的情况下,N 是 2。

稍后将用于存储矩阵的形状。