gpt4 book ai didi

c++ - 在 header 中声明一个没有大小的动态数组,在 .cpp 中定义

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:08 24 4
gpt4 key购买 nike

我正在编写一个类,该类具有动态二维整数数组作为字段 - 其中最重要的部分,较短的访问时间是可取的。我想在头文件中声明它,

//Grid.h
class Grid{
int ** array;
}

然而,它的大小和内容尚未在 cpp 文件中实现的构造函数中定义(可能是从 ini 文件中读取)。

我不确定是否在 header 中声明了一个 int **array 指针并稍后使用

动态分配数组给它
array = new int*[x];  
for(i=0;i<x;i++){
array[i] = new int [y];
}

将导致创建一个可访问的数组,并且不会在其他函数直接调用其定义中的 array[i][j] 字段时造成麻烦(或其他不太明显的错误),然而,在提到的函数开始调用之前,它将会并且必须已经被定义。

我的问题 - 这是有效且高效的方法吗?我会接受任何其他想法。
是的,我听说过“vector ”类,但我不确定它的效率或读写与整数数组的性能。 vector 的大小很灵活,但我不需要它 - 我的数组一旦设置,将具有固定大小。

可能是我太习惯了 Java 风格的 int[][] array 代码。

最佳答案

是的,您的方法有效且有效。你唯一的问题(显然)是确保你不超过限制(Java 为你检查,使用 C 你必须确保你在 [0...x-1] 之间。

然而,如果你说的是高效,更高效的方法是创建一个一维数组并乘以你的方式。这在内存使用(尤其是小尺寸)和访问时间方面会更有效率。您可以将访问函数包装在网格类 (Grid::Set(value, x,y), Grid::Get(x,y)) 中并自行检查大小是否超限。

//Grid.h
class Grid{
int maxx, maxy;
int *array;

public:
Grid(int x, int y);
~Grid();
int Get(int x, int y);
}


// making the grid
Grid::Grid(int x, int y)
{
this->maxx= x;
this->maxy= y;
this->array= new int[this->maxx*this->maxy];
}

// destroying the grid
Grid::~Grid()
{
this->maxx= this->maxy= 0;
delete []this->array;
this->array= NULL;
}

// accessing the grid
int Grid::Get(int x, int y)
{
#if DEBUG
assert(x>=0 && x<this->maxx);
assert(y>=0 && y<this->maxy);
#endif
return this->array[ y*this->maxx + x];
}
....

关于c++ - 在 header 中声明一个没有大小的动态数组,在 .cpp 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917238/

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