我在确定如何实现多个结构的嵌套方面遇到问题,目标是要有一个仓库,一个仓库,一个带架子的货架以及货架上放置物品的地方以及它们的2位ID。现在,我的代码看起来像这样:
#include<iostream>
struct place{
unsigned short place_[65545][2];
};
struct shelf{
place shelf_[128];
};
struct rack{
shelf rack_[128];
};
struct warehouse{
rack warehouse_[128];
shelf handy_warehouse_shelf_;
};
struct depot{
warehouse depot_[128];
rack handy_rack_;
shelf handy_depot_shelf_;
};
int main(){
depot name1;
name1.depot_[0].warehouse_[0].rack_[0].shelf_[0].place_[0][0]=1;
return 0;
}
并且无法弄清楚这是否是我了解结构如何工作或如何访问嵌套数组中特定“单元格”的问题。
答案 0 :(得分:0)
您的软件仓库正在使用65545 * 2 * 128 * 128 * 128 * 128 * sizeof(unsigned short)
字节以上的内存作为内存。对于自动存储的典型实现来说,这当然太过分了(“堆栈” ...通常AFAIK限制在1到8 MB之间)。
结构的嵌套是正确的……只是其中的大部分。
我建议将设计更改为:
struct Position {
unsigned warehouse;
unsigned rack;
unsigned shelf;
unsigned place;
unsigned row;
unsigned column;
};
struct Depot {
std::unordered_map<Position, unsigned short> places;
}
以上内容当然不是完整的实现,并且您还需要考虑如何处理handy_depot_shelf
之类的东西,但希望您能理解。
通过
访问the_depot.places[{0, 0, 0, 0, 0, 0}] = 1;
这当然仅是出于演示目的;您应该将其隐藏在成员函数中,并进行边界检查之类的事情。
如果您不能使用std::unordered_map
(分配?),那么您需要自己实现一个替代方案。一个非常简单的开始就是在每个节点中包含键和值的链表。遍历列表,直到找到具有匹配键的节点,然后返回对value的引用。否则,请添加具有键和值的新节点,并返回对该值的引用。