C++ - std::array 类型二维矩阵的定义
C++ - Definition of 2d matrices of type std::array
我想定义两个二维矩阵: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
link。但是为了使答案(和评论)有意义,我在下面添加了相关功能:
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 which is an aggregate initialization。
对于f_transpose
,您为 3 个子数组中的每一个都启动了一个初始化程序,每个数组缺少的元素是 value-initialized,这意味着 零初始化 float
.
对于 f
,您为 3 个数组指定初始值设定项,对于它们的元素,上述内容也适用。剩下的数组是间接的(通过value-initialization,
< C++11) 或直接 (≥ C++11) 聚合初始化 其中值初始化 因此零-初始化 它们的所有元素,因为初始化器是空的。
您是否正确验证了内容?
我想定义两个二维矩阵: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
link。但是为了使答案(和评论)有意义,我在下面添加了相关功能:
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 which is an aggregate initialization。
对于f_transpose
,您为 3 个子数组中的每一个都启动了一个初始化程序,每个数组缺少的元素是 value-initialized,这意味着 零初始化 float
.
对于 f
,您为 3 个数组指定初始值设定项,对于它们的元素,上述内容也适用。剩下的数组是间接的(通过value-initialization,
< C++11) 或直接 (≥ C++11) 聚合初始化 其中值初始化 因此零-初始化 它们的所有元素,因为初始化器是空的。
您是否正确验证了内容?