C++ - 定义 std::array 类型的二维矩阵

C++ - Definition of 2d matrices of type std::array

本文关键字:二维 定义 std array 类型 C++      更新时间:2023-10-16

我希望定义两个 2d 矩阵:ff_transpose 类型:std::array <std::array <float, 3>, dim>std::array <std::array <float, dim>, 3>dim的值是 23

我希望元素f[0][0]f[1][1]f[2][2]f_transpose[0][0]f_transpose[1][1]f_transpose[2][2] 1,其余元素0

这些数组是全局变量,我尝试了以下内容:

static array <array <float, 3>, dim> f = {{{{1}}, {{0, 1}}, {{0, 0, 1}}}};
static array <array <float, dim>, 3> f_transpose = {{{{1, 0, 0}}, {{0, 1, 0}}, {{0, 0, 1}}}};

这确实在必要的地方给了我1,但是应该0的一些值是1-1。我的理解是,任何未定义的东西都将被视为0,但显然这不是正在发生的事情。如何解决此问题?

编辑:

我不得不删除之前存在的github链接。但是为了使答案(和评论(有意义,我在下面添加了相关功能:

void print_ffamily(){
    cout << "F Matrix" << endl;
    for (int i = 0; i < 3; i++){
            for (int j = 0; j < dim; j++){
                printf("%0.2f ", f[i][j]);
            }
            cout << endl;
    }
    cout << "F transposed Matrix" << endl;
    for (int i = 0; i < dim; i++){
            for (int j = 0; j < 3; j++){
                printf("%0.2f ", f_transpose[i][j]);
            }
            cout << endl;
    }
}
我很

确定两者都是正确的。

对于两者都开始了列表初始化,在这种情况下是聚合初始化

对于f_transpose,您为 3 个子数组中的每个数组启动了初始值设定项,则每个数组的缺失元素都是初始化的,这意味着 float初始化为零
对于f,您为 3 个数组指定初始值设定项,对于它们的元素,上述内容也适用。其余数组是间接的(通过值初始化, <C++11(>聚合初始化,其值初始化并因此初始化其所有元素,因为初始值设定项为空。

是否正确验证了内容?