Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构中二维数组的动态内存分配_C++_Arrays_Vector_Struct_Multidimensional Array - Fatal编程技术网

C++ 结构中二维数组的动态内存分配

C++ 结构中二维数组的动态内存分配,c++,arrays,vector,struct,multidimensional-array,C++,Arrays,Vector,Struct,Multidimensional Array,我有一个结构,我在图像中查找行的开头和结尾,在这些行中查找单词、字母等的开头和结尾(实现基本OCR) 我想用动态分配的矩阵修改我的代码。但是因为我不知道会有多少行和单词,我不知道开始时的大小,所以不能进行简单的动态分配。你建议我在这种情况下使用向量吗?如果是这样,我应该如何使用它?您在一篇评论中阐明,二维数组中的列数将保持不变,而行数可以更改 因此,您可以使用1D向量并通过以下公式将(i,j)索引映射到单个索引来寻址元素:k=i*number\u of_columns+j 但是,您说过行数组只有

我有一个结构,我在图像中查找行的开头和结尾,在这些行中查找单词、字母等的开头和结尾(实现基本OCR)


我想用动态分配的矩阵修改我的代码。但是因为我不知道会有多少行和单词,我不知道开始时的大小,所以不能进行简单的动态分配。你建议我在这种情况下使用向量吗?如果是这样,我应该如何使用它?

您在一篇评论中阐明,二维数组中的列数将保持不变,而行数可以更改

因此,您可以使用1D向量并通过以下公式将
(i,j)
索引映射到单个索引来寻址元素:
k=i*number\u of_columns+j

但是,您说过
数组只有两列,一列用于行的开头,一列用于行的结尾。这使我认为,使用带有两个字段(开始、结束)的
struct/class并将该结构/类的实例放入一个简单的1D向量中更方便(尤其是对于语义而言)

当您设计一个数组时,其中每个元素根据其位置具有不同的含义,并且元素很少,我认为最好设计一个合适的结构

最后,因为这是C++,所以可以用这种方式声明结构:

struct X
{
    int a;
    // ...
}

没有专业的图像库在矩阵中保存图像数据。你只需做:

struct Image
{
  int col;
  std::vector<int> matrix;
};
struct图像
{
int col;
向量矩阵;
};

并访问像素,如
矩阵[x+col*y]
。这将是像素数据最快、最方便存储的布局。或者使用已经存在的图像结构来避免概念。

您应该使用向量,是的。你可以用向量的向量来模拟2D可变大小数组。。。行、空格、单词等中的列数是否。。。第一次分配后是否需要更改?@gd1没有列会相同,只有行会更改,例如**行有2列,第一列指示对应行的开始位置,第二列指示其结束位置。有两列的行是错误的。创建一个结构行{int start,int end},并将所有这些结构放在一个1-d数组中。@gd1我创建了它,比如字母有4列,第一列表示它在哪一行,第二行表示哪个单词,第三行和第四行是字母的开始和结束位置。我认为这个公式不正确。示例:1行,3列数组。我想访问元素
(0,2)
,您访问元素
x+cols*y=0+3*2=6
。此外,我认为OP有意为学习目的重新发明轮子@gd1非常好,那么我将在这里留下一个错误作为读者的练习。
struct Image
{
  int col;
  std::vector<int> matrix;
};