【问题标题】:Array of array of structs结构数组的数组
【发布时间】:2026-01-27 01:50:01
【问题描述】:

是否可以声明一个由其他数组(大小可变)组成的数组,该数组由 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 阵列组成。该解决方案不应使用比所需更多的内存。这就是我不使用二维数组的原因。

【问题讨论】:

  • 如果你不能使用std::vector<std::vector<Number>>,你可能需要为它提供自己的实现。
  • 那么你想要 C 还是 C++?你的问题是矛盾的。一方面,您要求 C/C++ 解决方案,并且您的问题有 c++ 标签,另一方面,您声明您正在使用 gcc 编译器。
  • 您的问题的答案是否定的,您要求的内容在C++ Standard Library 中。也许您可以找到另一个实现类似于std::vector 的库。
  • 我重写了混淆线,我真的很想学习 C++,所以这就是我使用 C++ 的原因。我正在尝试这样的解决方案:Number N0[] = { {0,0}, {1,1}, {2,2}, {4,4} }; Number N1[] = { {6,0}, {1,3}, {1,2} }; Number N2[] = { {7,0}, {1,2}, {0,2}, {4,8}, {6,6} }; Number *Numbers[] = { N0, N1, N2 }; 但是我不知道如何遍历 Numbers[0]; 的元素;所以 Numbers[0][0]->x 给我 0,0 而 Numbers[0][1]-x 给我 1。

标签: c++ arduino avr


【解决方案1】:

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

这样,您可以使用向量的向量

struct Number
{
  int x;
  int y;
};

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

然而,值得注意的是,Arduino 的内存真的很小,你应该对你的内存使用有上限。 vectorvector 没有巧妙地使用 reserve 可能会浪费一些内存...

另一种选择是:

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

当然,这决定了编译时固定内存消耗。 (Number 的 4x4 矩阵)。

【讨论】:

    【解决方案2】:

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

    编辑:哦,你换成 C++... 比让自己头疼并使用 std::vector。嗯...即使在 C 语言中,您也可以制作自己的 Vector,但不能使用模板。

    【讨论】:

    • 我最终使用了您的解决方案,也感谢其他回复的人。来自 GitHub 的 Arduino 向量实现给我带来了很多我无法修复的奇怪数据损坏错误。这也有点快,我认为使用更少的内存(尤其是程序内存)。
    【解决方案3】:

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

    【讨论】: