C++ 矢量填充和调整大小

C++ 矢量填充和调整大小,c++,C++,我在做一个地图生成器。我用二维向量来保存数据 标题: class MapGenerator { public: ... protected: std::vector< std::vector<int> > map; ... } 类映射生成器 { 公众: ... 受保护的: std::vectormap; ... } 它的大小在MapGenerator实例化后就已经知道了,我想知道是否有比我现在做的更干净的方法来正确地调整它的大小并用0填充它: Map

我在做一个地图生成器。我用二维向量来保存数据

标题:

class MapGenerator
{
public:
     ...
protected:
    std::vector< std::vector<int> > map;
...
}
类映射生成器
{
公众:
...
受保护的:
std::vectormap;
...
}
它的大小在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);
    }

}
MapGenerator::MapGenerator(int-dimensionX,int-dimensionY)
:尺寸X(尺寸X),尺寸Y(尺寸Y)
{
映射。调整大小(尺寸X);
对于(int i=0;i

这段代码很好用,但我想知道是否有更干净或更优化的方法。我在MinGW下使用GCC,我不认为我已经启用了C++ 11。

< P> <代码> Resisith有一个第二个参数,它是要填充的值。一个显式的
map[i].resize(dimensionY,0)
就足够了。

我从一个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]; }
};
array_2D<int> x(10, 10);

for (int i=0; i<10; i++)
    for (int j=0; j<10; j++)
        x(i, j) = rand();

可以使用
x[i][j]
语法编写一个执行2D寻址的类,但它足够复杂,除非您真正使用该语法,否则更容易避免它。如果您真的想要这样做,您可以在中看到一个示例(带有一个3D数组类)

这似乎是最简单的方法,它不会因为为地图本身使用额外的类而使事情复杂化

如果您希望避免“fill”函数调用,您可能需要查看

fill(映射[i].begin(),映射[i].end(),0)

可以由您自己的循环替换,例如“

for(int j=0;j

它可能不会增加您的时间复杂度,但可能会影响您的空间复杂度。

当然,请使用成员初始值设定项。
:map(dimensionX,std::vector(dimensionY))
之后所有值均为0。您可以使用2d数组。请参阅“Boost多维数组库”
for(int j = 0 ; j < map[i].size() ; j++){ map[i][j] = 0;}