Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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_Multidimensional Array - Fatal编程技术网

C 测试数组的第一个空值

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

在c中是否有测试二维int数组的第一个空值的方法

在我当前的程序中,我在主程序(while loop)之前使用了2个for循环,将我的二维数组的所有值设置为-9999。然后在我的主while循环中,我测试第一个-9999值并将其设置为一个值,然后使用break退出它

用这个我完成了我的任务,但我不是很满意,因为我认为可能有更好的解决方案

有吗

编辑:代码,因为您要求它

对于while循环外的循环:

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++;
  }
}