C++ - std :: array类型的2d矩阵的定义

skr*_*obo 5 c++ matrix c++11 stdarray

我想定义两个2d矩阵:ff_transpose类型:std::array <std::array <float, 3>, dim>std::array <std::array <float, dim>, 3>.价值dim23.

我希望元素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}}}};
Run Code Online (Sandbox Code Playgroud)

这确实给了我1必要的地方,但应该是的一些值01-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;
    }

}
Run Code Online (Sandbox Code Playgroud)

Dar*_*ter 3

I\xe2\x80\x99m 非常确定两者都是正确的。

\n\n

对于两者,您都启动了列表初始化,在本例中这是聚合初始化。

\n\n

因为f_transpose您为 3 个子数组中的每一个启动了一个初始化程序,所以每个数组的缺失元素都是值初始化的,这意味着的初始化为零float
\n如果f您为 3 个数组指定初始值设定项,则上述内容也适用于它们的元素。其余数组是间接(通过value-initializaion ,\n < C++11)或直接 (\xe2\x89\xa5 C++11)聚合初始化,其值初始化,因此将其所有元素零初始化,因为初始化器为空。

\n\n

您是否正确验证内容?

\n