我有一个文件,数字用单个空格分隔,我想将它们放入2D数组中。每行有200行和320个数字。 这是我的代码:
int data[200][320];
int i = 0;
int j = 0;
file.open("./../../../Data_PR2/data.txt", ios::in);
while (file>> data[i][j])
{
if (j == 319) {
j = 0;
i++;
} else
j++;
}
它有点工作,因为第一行是正确插入但不是所有行。
那有什么不对?
答案 0 :(得分:1)
更简单的方法是使用/
和%
代替if
语句:
unsigned int count = 0;
unsigned int row = 0;
unsigned int column = 0;
while (file >> data[row][column])
{
++count;
column = count % 320;
row = count / 320;
}
也许更有效的方法是将数组视为单维数组,因为所有插槽都是连续的:
int * p_slot = &data[0][0];
while (file >> *p_slot)
{
++p_slot;
}
还有其他方法,例如输入迭代器。
以上示例不检查溢出。溢出检查留给读者练习。 : - )
注意:这不是优化,而是简化。格式转换,越界检查和输入过程,使优化没有实际意义。最大的优化是将更大的块读入内存,然后从内存中读取;但是对于这个尺寸,这是不值得的。