如何为二维数组创建类

How can I create class for 2 dimentional array?

本文关键字:创建 二维数组      更新时间:2023-10-16

我想通过使用泛型编程来创建类,以支持下面的语句

matrix<int, 2, 2> tonpai = { { 1,2 },{ 3,4 } };

谢谢。//我试着这样做,但我不知道构造函数的论点应该是什么。对不起我的英语。这是我的第一个问题。

我猜你的问题实际上是关于如何让类的构造函数接受这种初始值设定项列表。然而,评论者似乎认为您在询问如何实现矩阵类。

为了防止我说得对,这里有一个从初始值设定项列表构造的例子。

但如果我错了,请记住,这个例子的数组实现很糟糕,你不想使用它。我选择C风格的静态数组只是因为它设置简单,而且人们熟悉它们的工作方式。

此外,如果列表中的元素太多,则此初始化将在数组的边界之外写入,因此请记住您的类。

我还假设您不关心保持构造函数constexpr。

这里是一个构造函数接受2嵌套初始值设定项列表的例子,只是…:

#include <initializer_list>
#include <iostream>
template <typename T, int row_count, int col_count>
class matrix {
    T carray[row_count][col_count];
public:
    matrix(std::initializer_list< std::initializer_list<T> > init_list) {
        int rowidx=0;
        for(const auto& row : init_list) {
            int colidx=0;
            for(const auto& elem : row) {
                carray[rowidx][colidx++] = elem;
            }
            ++rowidx;
        }
    }
    void Print() const {
        for(const auto& row : carray) {
            for(const T& elem : row) {
                std::cout << elem << "  ";
            }
            std::cout << 'n';
        }
    }
};

int main() {
    matrix<int, 2, 2> tonpai = { { 1,2 }, { 3,4 } };
    tonpai.Print();
}