【发布时间】:2019-06-23 23:30:38
【问题描述】:
我正在尝试使用二维数组和 PNG 图像制作一个基本的块加载系统。例如,我只是想知道是否可以创建一个未初始化的数组;
Chunk[][] chunks;
然后根据PNG图片的大小进行初始化,用不同的rgb像素代表不同的瓦片。
假设图像是 15x25,是否可以用这样的方式初始化二维数组?
chunks = new Chunk[15][25];
或者我应该制作一个大数组,然后将未设置的索引设置为 VOID 磁贴,我可以简单地制作。
感谢大家的帮助!
【问题讨论】:
-
How do I declare a 2d array in C++ using new? 的可能重复项。我建议使用
std::array<std::array<Chunk, 15>, 25>或按照您自己的 15*25 1D 数组的建议。 -
你可以使用
std::vector,std::vector<std::vector<Chunk>> chunks(15, std::vector<Chunk>(25)); -
Chunk[][] chunks;不是合法的 C++,除了第一个维度之外的所有维度都必须使用编译时间常数来指定。使用向量 (1D) 或向量的向量 (2D),而不是 2D 数组。 -
chunks = new Chunk[a][b]很难实现。数组的大小是恒定的,应该在编译时定义(不过,GCC 确实有一个扩展,允许const int确定大小)。无法在编译时读取此 PNG 图像或一般文件。因此,您应该使用其他容器,例如std::vector<T>,其大小不必预先确定。 -
这些重复项都不正确,问题需要具有动态维度的连续内存块。