我正在研究地图生成器。我使用二维向量来保存数据。
Header:
class MapGenerator
{
public:
...
protected:
std::vector< std::vector<int> > map;
...
}
一旦 MapGenerator 实例化,它的大小就已知,我想知道是否有比我当前所做的更干净的方法来正确调整其大小并用 0 填充它:
MapGenerator::MapGenerator(int dimensionX, int dimensionY)
: dimensionX(dimensionX), dimensionY(dimensionY)
{
map.resize(dimensionX);
for(int i = 0 ; i < map.size() ; i++)
{
map[i].resize(dimensionY);
fill(map[i].begin(), map[i].end(), 0);
}
}
这段代码工作得很好,但如果有更干净或更优化的方法我想知道。我在 MinGW 下使用 GCC,但我认为我没有启用 C++ 11。
我将从 2D 数组类开始,如下所示:
template <class T>
class array_2D {
std::vector<T> data;
size_t cols;
public:
array_2D(size_t x, size_t y) : cols(x), data(x*y) {}
T &operator()(size_t x, size_t y) { return data[y*cols+x]; }
};
无需显式地将其填零。当您创建或调整大小时std::vector
,您传递一个将用于填充新的“空”空间的值。如果您没有显式传递另一个值,它将使用T()
,如果是内置算术类型,则结果为 0 (short
, int
, long
, etc.)
请注意,正如所写,它使用括号进行寻址(如 Fortran 或 BASIC),因此要创建一个 2D 数组并用随机数填充它,您可以执行以下操作:
array_2D<int> x(10, 10);
for (int i=0; i<10; i++)
for (int j=0; j<10; j++)
x(i, j) = rand();
可以编写一个执行 2D 寻址的类x[i][j]
语法,但它已经足够复杂了,除非你really设置该语法,更容易避免它。如果你真的想要这个,你可以在一个例子中看到一个例子(带有 3D 数组类)较旧的答案.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)