我正在尝试重写用C ++编写的用matlab编写的代码。
我在matlab中有一个包含256个术语的长单元格,其中每个术语都是2x2矩阵。在matlab中我这样写了。
xA = cell(1,256);
xA{1}=[0 0;3 1];
xA{2}=[0 0;13 1];
xA{3}=[0 0;3 2];
依旧......
在c ++中最简单的用法是什么?
我可以一次为所有4个值提供尺寸为[256] [2] [2]的数组,还是必须为数组中的每个特定值编写一行?
/Mr.Buxley
答案 0 :(得分:5)
你当然可以一次性初始化它们,虽然这听起来像很繁琐的输入:
float terms[256][4] = {
{ 0, 0, 3, 1 },
{ 0, 0, 13, 1 },
{ 0, 0, 3, 2}
...
};
为简单起见,我将其简化为256个4元素数组的数组。如果你想真正表达预期的嵌套,当然这很好,你需要做:
float terms[256][2][2] = {
{ { 0, 0 }, { 3, 1 } },
{ { 0, 0 }, { 13, 1 } },
{ { 0, 0 }, { 3, 2 }}
...
};
那将是256行,每行有一个浮动的两个“列表”的“列表”。每个列表都需要大括号。但是,由于C ++支持在这些事情中抑制大括号,你也可以这样做:
float terms[256][2][2] = {
{ 0, 0, 3, 1 },
{ 0, 0, 13, 1 },
{ 0, 0, 3, 2}
...
};
事实上,你甚至可以删除每一行的大括号,它们也是可选的。不过,我认为依靠抑制略显阴暗。
如果要使用比float
的嵌套数组更高级别的类型(例如Matrix<2,2>
类型或其他类型),初始化可能会变得越来越粗糙。