C 测试数组的第一个空值
在c中是否有测试二维int数组的第一个空值的方法 在我当前的程序中,我在主程序(while loop)之前使用了2个for循环,将我的二维数组的所有值设置为-9999。然后在我的主while循环中,我测试第一个-9999值并将其设置为一个值,然后使用break退出它 用这个我完成了我的任务,但我不是很满意,因为我认为可能有更好的解决方案 有吗 编辑:代码,因为您要求它 对于while循环外的循环:C 测试数组的第一个空值,c,multidimensional-array,C,Multidimensional Array,在c中是否有测试二维int数组的第一个空值的方法 在我当前的程序中,我在主程序(while loop)之前使用了2个for循环,将我的二维数组的所有值设置为-9999。然后在我的主while循环中,我测试第一个-9999值并将其设置为一个值,然后使用break退出它 用这个我完成了我的任务,但我不是很满意,因为我认为可能有更好的解决方案 有吗 编辑:代码,因为您要求它 对于while循环外的循环: for(int x=0;x<ctr-1;x++) { for(int y=0;y&l
for(int x=0;x<ctr-1;x++)
{
for(int y=0;y<maxtrips;y++)
{
EmployeeKilos[x][y] = -9999; // Set all the kilos to -9999 to signify emptiness.
}
}
for(int x=0;x<ctr-1;x++) // and set it to the log kilometers
{
if(employeenames[x].EmployeeNumber == log.Record)
{
for(int y=0;y<maxtrips;y++)
{
if(EmployeeKilos[x][y] == -9999)
{
EmployeeKilos[x][y] = log.Kilometers;
break;
}
}
}
}
for(int x=0;x您可以使用它将数组初始化为固定值-这比在数组上迭代更高效、更简洁
不过,检查“空”值的速度不会比您现在的速度快很多。:)您可以使用它将数组初始化为固定值-这比在数组上迭代更高效、更干净
不过,检查“空”值的速度不能比检查速度快得多。:) 正如Dave所说,检查空值不能比线性时间(O(n))更有效,但我的答案集中在一个解决方案上,可以避免首先查找空值
通常,您可以以行主模式或列主模式迭代矩阵
实际上,您可以使用单个索引转换为矩阵单元,如下所示
for (size_t i=0; i<ROWS*COLS; ++i)
{
int row = i / ROWS;
int col = i % ROWS;
// work with matrix[row][col]
}
现在你可以说:
add_next(matrix, 42);
add_next(matrix, 9);
注意输出迭代器假定为连续存储,因此不能与所谓的
正如Dave所说,检查空值不能比线性时间(O(n))更有效,但我的答案集中在一个解决方案上,可以避免首先查找空值
通常,您可以以行主模式或列主模式迭代矩阵
实际上,您可以使用单个索引转换为矩阵单元,如下所示
for (size_t i=0; i<ROWS*COLS; ++i)
{
int row = i / ROWS;
int col = i % ROWS;
// work with matrix[row][col]
}
现在你可以说:
add_next(matrix, 42);
add_next(matrix, 9);
注意输出迭代器假定为连续存储,因此不能与所谓的
HTH听起来您应该考虑您的数据类型。因为您已经在使用结构。为什么不为最后一个未赋值的值添加另一个int,这样就可以循环到它。差不多
e、 g:
并在以千克为单位指定新元素时设置nlast。这样它就是O(1)
for(int x=0;x听起来您应该考虑您的数据类型。因为您已经在使用结构。为什么不为最后一个未赋值的值添加另一个int,这样您就可以循环到它。类似于
e、 g:
并在以千克为单位分配新元素时设置nlast。这样它就是O(1)
for(int x=0;xnope.没有代码(我看不到),因此我们无法提出更好的不存在代码版本:)。虽然我的解释足够好,但还是添加了它可能更适合于?不,没有代码(我看不到),因此我们无法提出更好的不存在代码版本:)。虽然我的解释足够好,不管怎么说,它可能更适合?哇,看起来很复杂,但我会仔细阅读。谢谢:)@lelouch:正如Dave所说,检查空值不能比线性时间(O(n))更有效,但我的答案集中在一个解决方案上,该解决方案可以避免首先查找空值。如果在顺序循环中填充这些值,这将意味着线性和二次(O(n*n)
)时间之间的差异。请注意,二次时间很快就成为经常使用的代码(或大型n
)中一个明显的性能瓶颈。哇,看起来很复杂,但我会仔细阅读。谢谢:)@lelouch:正如Dave所说,检查空值不能比线性时间(O(n))更有效,但我的答案集中在一个解决方案上,该解决方案可以避免首先查找空值。如果在顺序循环中填充这些值,这将意味着线性和二次(O(n*n)
)时间之间的差异。请注意,二次时间很快就会成为常用代码(或大型n
)中明显的性能瓶颈
for(int x=0;x<ctr-1;x++) //
{
if(employeenames[x].EmployeeNumber == log.Record)
{
EmployeeKilos[x].kilos[EmployeeKilos[x].nlast] = log.Kilometers;
EmployeeKilos[x].nlast++;
}
}