我希望定义两个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}}}};
这确实在必要的地方提供了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;
}
}
链接。但是为了使答案(和评论)有意义,我在下面添加了相关功能:
std::variant<bool, int, double, std::string_view>;
答案 0 :(得分:2)
我很确定两者都是正确的。
对于你开始list-initialization的两个人,在这种情况下是aggregate initialization。
对于f_transpose
,您为3个子数组中的每一个启动了初始值设定项,每个数组的缺失元素为value-initialized,这意味着{em>零初始化 {{1} }}。
对于float
,您为3个数组指定了初始值设定项,对于它们的元素,上面也适用。其余数组是间接的(通过 value-initializaion ,
&LT; C ++ 11)或直接(≥C++ 11)聚合初始化 值初始化因此零初始化所有元素因为初始化程序是空的。
您是否正确验证了内容?