【发布时间】:2015-09-29 21:19:11
【问题描述】:
我对一般的编程有点陌生,并且在声明 3D 和 4D 数组时遇到了问题。我在 main 函数的开头有几个这样的声明,但我已将问题缩小到这 4 个:
string reg_perm_mark_name[64][64][64];
short reg_perm_mark_node_idex[64][64][64];
short reg_perm_mark_rot[64][64][64][4];
short reg_perm_mark_trans[64][64][64][3];
当我使用这些运行我的程序时,我的可执行文件中会出现“System.StackOverflowException”。我更喜欢动态分配它们的方式,我现在拥有的方式无论如何都是临时的,我不确定如何正确声明数组指针。
例如,我在 4D 数组 reg_perm_mark_trans 中使用的 4 个元素是 [节点索引][区域索引][标记索引][xyz 坐标]。还有一次总共声明了 35 个多维数组。 (其中大多数是 1D 和 2D)我不确定这是否有帮助。
有人可以告诉我如何使这些 4d 数组工作,或者如何使它们使用指针或向量动态分配吗?请描述一下,我还在学习。
【问题讨论】:
-
这种“简单”变量的空间故意非常有限。你的数组太大了。使用
vector等(在内部使用new,不受限制。)。std::vector在网上的使用例子已经够多了。 -
不过,标准容器不能很好地替代多维数组。
-
@celticminstrel
std::array是裸多维数组的绝佳替代品。当您使用动态大小的多维数组时,std::vector也是如此。 -
哦,你说得有道理——
std::array至少是多维数组的不错替代品。不过,std::vector并没有那么多 - 您必须在手动展平索引或使用“锯齿状数组”而不是真正的多维数组之间做出选择。 -
请注意我对
std::vector的评论中的动态大小部分。与使用std::vector相比,您尝试自己管理动态大小 多维数组的开销更大。真正的好处是您可以最轻松地混合和匹配它们,这样您就可以两全其美,而不会因忽略标准容器的有用性而带来所有开销和头痛。
标签: c++ arrays pointers multidimensional-array stack-overflow