固定大小的 3D 表

Posted

技术标签:

【中文标题】固定大小的 3D 表【英文标题】:3D table of constant size 【发布时间】:2021-03-24 21:28:39 【问题描述】:

我被要求创建一个包含 3D 表格的类。但是,尺寸不是标准的,由用户给定。我显然可以使用向量,那很好。但是,我可以在初始化后制作恒定大小的向量吗,或者是否可以在不使用向量的情况下创建这样的对象?提前致谢

【问题讨论】:

在你自己的类中包装一个一维向量,这样你就可以控制向量并确保它的大小没有改变。你可以在这里看到如何做到这一点:***.com/questions/43358369/… 包含 3D 表格的类表示 3D 表格的类是有区别的。确保你知道你想要实现什么。 如果你喜欢的话,你可以使用 3d 链表来代替向量 - 概率。甚至会很有趣:) 或者基本上任何你想要的容器甚至持有一个结构。 你可以这样做:` yourType *3DTable = new yourType [size][size][size]; ` @GeorgiosDemeteiou 它基本上是一个结构“容器”,包含下一个结构的指针,您正在动态填充资源。 (结构或类的级联)3D 仅意味着持有 3 个不同的值(值的值和值的值)Alex Allain had the best explaination for me 【参考方案1】:

但是,我可以在初始化后制作恒定大小的向量

如果您不调整矢量大小,则其大小保持不变。您可以将向量设为类的私有成员,以通过类不变量来强制执行此类限制。

或者有没有其他方法可以在不使用向量的情况下创建这样的对象?

您可以在不使用向量的情况下分配动态数组。但这不会那么方便。

【讨论】:

确实如此,我想知道是否有替代方案,但无论如何感谢您的即时回复 我认为这只是问题的第一部分,答案缺少“是否有替代方法来创建这样的对象,而不使用向量” @Ivanovic 很公平,我也写了第二部分的答案。 键是大小为 3 的数组的无序映射难道不是一个解决方案吗? @TUIlover 好吧,数组不能是地图的键,但如果你将它包装在一个类中(即使用std::array),它就可以工作。但是,如果每个索引都有一个元素,那么这将是一个非常低效的解决方案。如果意图是让元素仅存在于一小部分索引中,那可能是可以的。【参考方案2】:

您可以使用new,但这意味着您需要做很多工作。这是一个最小的例子:

class threeDTable 
  public :
    threeDTable(int n)data = new yourType[n*n*n]; size=n;
    ~threeDTable()delete []data;
    void set(int x, int y, int z, yourType value)data[size*size*x + size*y + z]=value;
    yourType get(int x, int y, int z)const return data[size*size*x + size*y + z];
  private :
    yourType *data;
    int size;
  ;

【讨论】:

以上是关于固定大小的 3D 表的主要内容,如果未能解决你的问题,请参考以下文章

为啥将地址右移三位作为固定大小哈希表的哈希函数?

如何在引导响应表中为一行保持固定大小?

如何在Oracle中将表行拆分为固定大小的块

numpy的ndarray数组如何reshape成固定大小

如何将固定颜色条添加到 3D 散点动画图并相应地对点进行颜色映射?

从 IB 添加到表视图的 UIView 被调整大小并且不保持固定大小(XCode 6 | ios 8 | 非 ARC 代码)