在头文件中声明一个没有大小的动态数组,在.cpp中定义
Declaring a dynamic array without size in header, defining in .cpp
我正在编写一个具有动态二维整数数组作为字段的类-最重要的部分是,访问时间短是可取的。我想在头文件
中声明它//Grid.h
class Grid{
int ** array;
}
然而,它的大小和内容尚未在CPP文件(可能是从ini文件读取的)中实现的构造函数中定义。
我不确定是否在头文件中声明int **array
指针,并使用
array = new int*[x];
for(i=0;i<x;i++){
array[i] = new int [y];
}
将导致创建一个可访问的数组,并且在其他函数在其定义中直接调用array[i][j]
的字段时不会造成麻烦(或其他不太明显的错误),但是,假设前面提到的函数开始调用,它将并且必须已经定义。
我的问题是——这是有效和有效的方法吗?其他的主意我都接受。
是的,我听说过"向量"类,但我不确定它的效率或读写与整数数组的性能。向量的大小是灵活的,但我不需要它-我的数组一旦设置,将有固定的大小。
可能我只是太习惯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];
}
....
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错