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

标签 c++ c++11 matrix stdarray

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

}

最佳答案

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

对于你们开始的两个list-initialization这是一个aggregate initialization在这种情况下。

对于 f_transpose,您为 3 个子数组中的每一个启动了一个初始化程序,每个数组缺少的元素是 value-initialized这意味着 零初始化 float
对于 f,您为 3 个数组指定了初始值设定项,对于它们的元素,上述内容也适用。其余数组是间接的(通过值初始化, < C++11) 或直接 (≥ C++11) 聚合初始化值初始化,因此零初始化元素,因为初始值设定项为空。

您是否正确验证了内容?

关于C++ - std::array 类型的二维矩阵的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42989569/

相关文章:

c++ - 类类型变量声明错误

c++ - 在 Linux 中使用 C++ 中的内联汇编是否有比 GCC 或 Clang 实现更直观的方法?

c++ - 取消引用 NULL 指针是否保证使 C/C++ 中的程序崩溃?

c++ - 混合 std::move() 和 std::thread 不会编译

c++ - std、tr1 和 boost(作为命名空间和/或库)之间有什么区别?

android - 使用 "Matrix"旋转两个 "Bitmap"

Javascript如何在使用变换矩阵数据时考虑变换原点

c++ - 没有 "const char*"的段错误

c++ - 当我在同一范围内多次初始化同名局部变量时,为什么 C++11 编译器不报错?

math - 乘法矩阵