【问题标题】:C++ - Definition of 2d matrices of type std::arrayC++ - std::array 类型的二维矩阵的定义
【发布时间】:2017-03-24 00:54:15
【问题描述】:

我希望定义两个二维矩阵: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;
    }

}

【问题讨论】:

    标签: c++ c++11 matrix stdarray


    【解决方案1】:

    我很确定两者都是正确的。

    对于这两个你都开始list-initialization,在这种情况下是aggregate initialization

    对于 f_transpose,您为 3 个子数组中的每一个都启动了一个初始化程序,每个数组的缺失元素是 value-initialized,这意味着对于 float零初始化
    对于f,您为 3 个数组指定初始化器,对于它们的元素,上述内容也适用。其余的数组是间接的(通过 value-initializaion聚合初始化 其中 值初始化 并因此 零初始化元素,因为初始化程序是空的。

    您是否正确验证了内容?

    【讨论】:

    • 是的。我相信是这样。但是,我打算仔细检查 A - Z 的所有内容,看看代码的任何其他部分是否会产生问题。但这是我添加的最新 sn-p,到目前为止一切正常。我会在检查一切后更新。
    • print_ffamily 中,您迭代f,就好像它是f_transpose,反之则为f_transpose。澄清一下:C++ 是行主要的,f 有 23 行,每行 3 个元素,f_transpose 反之亦然。
    • 这是一个非常愚蠢的错误。谢谢你指出来。
    • 考虑使用像:for (auto &amp;&amp; row : mat) { for (auto &amp;&amp; elem : row) { std::cout &lt;&lt; elem &lt;&lt; ' '; } std::cout &lt;&lt; '\n' } 这样的循环来防止此类问题。 std::array 知道自己的大小,利用它。
    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2021-11-16
    • 2021-10-30
    • 1970-01-01
    • 2015-12-13
    • 2021-08-14
    • 2021-12-26
    相关资源
    最近更新 更多