gpt4 book ai didi

c++ - vector 填充和调整大小

转载 作者:行者123 更新时间:2023-11-30 02:58:23 26 4
gpt4 key购买 nike

我正在研究 map 生成器。我正在使用二维 vector 来保存数据。

标题:

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。

最佳答案

我将从二维数组类开始,类似这样:

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(),在内置算术类型(shortint, long 等)

请注意,如所写,这使用括号进行寻址(如 Fortran 或 BASIC),因此要创建一个二维数组并用随机数填充它,您可以这样做:

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 寻址的类,但它足够复杂,除非您真的开始这种语法,更容易避免它。如果你真的想要那个,你可以在 older answer 中看到一个示例(带有 3D 数组类) .

关于c++ - vector 填充和调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com