我正在尝试从正在读取的.txt中填充数组。我正在使用以下代码作为函数来读取文件:
[(1, 'Foo', [5, 12, 42]), (2, 'Bar', [5, 12, 29])]
现在,当我读取文件时,我试图从1D数据数组中获取元素并将其存储到2D数组中。
我试图在公共类中创建一个数组,但是我不知道如何将读取的数据移动到2D数组中。
我知道还不是很清楚,但是基本上我正在做最近邻居搜索算法来比较2张图像。我已经使用上面的这段代码拍摄了一张图像并将其转换为值。但是现在我正在尝试将读取的数据存储到2D公共数组中?
答案 0 :(得分:3)
以下是2D矩阵中阅读的更紧凑版本:
int quantity = sizeR * sizeC;
double * matrix = new double [quantity];
double value = 0.0;
double * p_cell = matrix;
//...
while ((myfile >> value) && (quantity > 0))
{
*p_cell++ = value;
--quantity;
}
在上面的代码段中,使用指针指向矩阵(2D数组)的下一个插槽或单元格。每次读取后,指针将递增。
减少quantity
是一项安全检查,以防止缓冲区溢出。
答案 1 :(得分:0)
假设返回的每个double都代表一个像素。您可以定义一个检索像素的函数,如下所示:
double get_pixel(int x, int y, double* data, int sizeC)
{
return data[x + y*sizeC];
}
sizeC
是图像的宽度(列数)。
然后您可以使用上面的函数像这样填充2D数组:
for(int i = 0; i < sizeC; i++)
for(int j = 0; j < sizeR; j++)
my2Darray[i][j] = get_pixel(i, j, data, sizeC);
但是请注意这是不必要的。您实际上并不需要2D数组:)使其简单高效。
上面的函数可能是表示Image的结构的一部分,在这里您将sizeC,sizeR和数据定义为成员。
struct Image
{
int sizeC;
int sizeR;
double* data;
get_pixel(int x, int y)
{
return data[x + y*sizeC];
}
};
然后只需访问即可访问图像像素:
Image img;
// read image data and stuff
double p = img.get_pixel(4, 2);
您甚至可以通过覆盖operator()而不是get_pixel来使其看起来更漂亮,因此检索该像素将类似于:
double p = img(4, 2);