结构体中二维数组的动态内存分配
Dynamic memory allocation of 2d arrays that are in the struct
我有一个结构体,我正在寻找图像中行的开始和结束,以及在这些行中单词,字母等的开始和结束(实现基本的OCR)
typedef struct _IMAGE {
int row;
int col;
int max_value;
int **line;
int **space;
int **word;
int **letter;
int **matrix;//holds the image pixels
} IMAGE;
我想用动态分配矩阵改变我的代码。但是因为我不知道有多少行和字我不知道开始的大小所以不能做简单的动态分配。你建议我在这种情况下使用矢量吗?如果有,我应该如何使用它?
您在评论中澄清了2D数组中的列数将保持不变,而行数可以更改。
因此,您可以使用1D向量,并通过将(i, j)
索引映射到单个索引来寻址元素,公式为:k = i * number_of_columns + j
。
然而,您说line
数组将只有2列,一列用于该行的开始,一列用于该行的结束。这使我认为更方便(特别是对于语义)有一个Line
结构/类有两个字段(开始,结束),并把这个结构/类的实例变成一个简单的1D向量。
当你设计一个数组,其中每个元素都有不同的意义取决于它的位置,元素很少,我认为最好设计一个合适的结构体。
最后,因为这是c++,你可以这样声明结构体:
struct X
{
int a;
// ...
}
没有专业的图像库将图像数据保存在矩阵中。您应该简单地执行:
struct Image
{
int col;
std::vector<int> matrix;
};
并访问像matrix[x+ col* y]
这样的像素。这将是像素数据最快,最内存友好的布局。或者使用已经存在的图像结构来避免NIH的概念。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配