从.txt文件填充数组

时间:2018-12-05 14:57:25

标签: c++ arrays approximate-nn-searching

我正在尝试从正在读取的.txt中填充数组。我正在使用以下代码作为函数来读取文件:

[(1, 'Foo', [5, 12, 42]), (2, 'Bar', [5, 12, 29])]

现在,当我读取文件时,我试图从1D数据数组中获取元素并将其存储到2D数组中。

我试图在公共类中创建一个数组,但是我不知道如何将读取的数据移动到2D数组中。

我知道还不是很清楚,但是基本上我正在做最近邻居搜索算法来比较2张图像。我已经使用上面的这段代码拍摄了一张图像并将其转换为值。但是现在我正在尝试将读取的数据存储到2D公共数组中?

2 个答案:

答案 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);