C++ - 定义 std::array 类型的二维矩阵
C++ - Definition of 2d matrices of type std::array
我希望定义两个 2d 矩阵:f
和 f_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(>聚合初始化,其值初始化并因此初始化其所有元素,因为初始值设定项为空。
是否正确验证了内容?
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 如何在 Visual Studio C++ 11 中运行时定义二维数组?
- C++ - 定义 std::array 类型的二维矩阵
- 使用二维数组作为一维数组是否正确?可能会导致未定义的行为左右?
- 如何定义二维矢量哪个元素是可变大小的向量
- 二维数组传入没有全局定义 (M x N) 的函数
- 具有未定义的第二维的二维数组
- 用C++MATLAB API定义二维数组
- 如何定义用于表示二维坐标的模板之间的转换
- C++ 二维数组定义
- 如何以"二维方式"使用 boost::variant 定义异构 std::map
- 在C++中定义二维数组
- 无法创建以用户定义类为键的二维无序映射
- 二维数组定义
- 定义boost::dynamic_bitset的(一/二)维数组
- C/C++:这是未定义的行为吗?(二维阵列)