结构数组的数组

时间:2016-05-21 20:52:56

标签: c++ arduino avr

是否可以声明一个由C ++中的结构组成的其他数组(可变大小)组成的数组?如果有一种简单有效的方法(使用for)迭代数组元素内的所有结构,那将是非常好的。

结构的定义如下:

struct Number
{
  int x;
  int y;
};

例如,数据类似于:

{
    { {0,0}, {0,1} },
    { {0,0}, {0,1}, {1,0}, {0,0} },
    { {0,0}, },
    { {0,0}, {4,0} }
}

我想将它用于由Arduino Uno,以太网屏蔽,RTC和LED阵列组成的自制时钟。解决方案不应该使用比需要更多的内存。这就是我不使用二维数组的原因。

3 个答案:

答案 0 :(得分:3)

您可以使用Standard C++ For Arduino。它implements一个std::vector

有了它,你可以使用矢量矢量

struct Number
{
  int x;
  int y;
};

using MultiNum = std::vector<std::vector<Number>>;

然而,值得注意的是,Arduino的内存非常小,你的内存使用率确实应该上限。 vector的{​​{1}} vector没有巧妙地使用reserve可能会浪费一些记忆......

另一种选择是:

Number x[][4] =
    {
    { {0,0}, {0,1} },
    { {0,0}, {0,1}, {1,0}, {0,0} },
    { {0,0}, },
    { {0,0}, {4,0} }
    };

原因是,它指示在编译时修复内存消耗。 (4 {4矩阵Number)。

答案 1 :(得分:0)

是,Number* var[];Number** var;。案件结束:)

编辑:哦,你换成了C ++ ......比起来让自己头疼并使用std :: vector。嗯......你甚至可以在C中创建自己的Vector,但没有模板。

答案 2 :(得分:0)

如果您关心的是内存,您可以随时声明Number **var并在需要时手动分配和重新分配空间。