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

时间:2018-08-14 16:23:06

标签: c++ arrays c++11 templates copy-constructor

在阅读《 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 个答案:

答案 0 :(得分:3)

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

没有此成员变量dimMatrix< T >不知道其堆分配数组elem中包含多少个元素(请注意,{{1 }}是指向包含在连续元素数组中的第一个元素的指针。因此elem无法安全地迭代这些元素,因为它不知道何时停止。 (实际上,Matrix< T >唯一可以执行的有用操作是取消分配堆分配的数组,就像析构函数中那样。)因此,要分配堆的数组(即Matrix< T >)的大小也被明确存储。

答案 1 :(得分:2)

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

array<int,N> x;

声明一个长度为x的整数数组; x等于2。

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

答案 2 :(得分:1)

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