如何为2维数组创建类?

时间:2016-04-08 04:34:56

标签: c++

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

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

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

1 个答案:

答案 0 :(得分:1)

我猜你的问题实际上是关于如何让你的类'构造函数接受那种初始化列表。但是,评论员似乎认为你在询问如何实现矩阵类。

以防我是对的,这是一个从初始化列表构建的示例。

但如果我错了,请记住这个例子的数组实现很糟糕,你不想使用它。我选择了一个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();
}