我有一个用于图块地图的二维整数数组。
地图的大小未知,并在运行时从文件读入。目前最大的文件是2500项(50x50网格)。
我有一个先前问题的动态内存分配的工作方法,但人们一直说这是一个坏主意所以我一直在考虑是否只使用一个大数组而不是在使用较小的地图时填写它
人们是否知道任何一种解决方案的优缺点?任何建议或个人意见欢迎。
c ++ btw
编辑:所有地图都是由我制作的,所以我可以选择最大尺寸。
答案 0 :(得分:9)
可能最简单的方法是例如std::vector<std::vector<int> >
允许它动态调整大小并让库为你做所有的分配。这样可以防止意外泄漏内存。
答案 1 :(得分:2)
我的偏好是动态分配。这样你应该遇到一个令人惊讶的大地图,你希望如果你写得正确就会溢出,而固定大小你唯一的选择是返回错误并失败。
据推测,加载平铺贴图是一种非常罕见的操作。我也愿意打赌,你甚至无法衡量两者之间速度的有意义差异。除非有可衡量的性能降低,或者你实际上遇到了导致问题的其他因素,否则静态大小似乎是过早的优化并且以后会遇到麻烦。
答案 2 :(得分:2)
完全取决于您未说明的要求: - )
如果您希望自己的应用尽可能快速,无法处理更大的磁贴地图,那么一定要使用大型数据。对于基于PIC的小型嵌入式系统,这可能是一种理想的方法。
但是,如果您希望代码具有健壮性,可扩展性,可维护性并且通常适合更广泛的受众,请使用STL容器。
或者,如果您只是想学习东西,并且不关心可维护性或性能,请尝试从头开始编写自己的动态分配容器。
答案 3 :(得分:1)
我认为人们通过动态分配引用的问题来自于分配随机大小的内存块而无法有效管理解除分配时留下的随机大小的漏洞。如果您要分配固定大小的磁贴,那么这可能不是问题。
我看到不少人建议分配大块内存并自行管理。这可能是另一种解决方案。
答案 4 :(得分:1)
动态分配内存是程序中的瓶颈吗?这是性能问题的原因吗?如果没有,那么只需保持动态分配,就可以处理任何地图大小。如果是,那么可能使用一些数据结构,该数据结构不释放它已分配的内存,而是使用其旧缓冲区,如果需要,重新分配更多内存。