c - 测试数组的第一个空值

标签 c multidimensional-array

有没有办法在 c 中测试 2 dimensional int array 的第一个空值?

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

使用它我设法完成了我的任务,但我不是很满意,因为我认为可能有更好的解决方案。

有吗?

编辑:您要求的代码。

for循环外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.
    }
}

在我的主 while 循环中:

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

我所有的代码:http://pastebin.com/Zb60mym8

最佳答案

正如 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]
}

这样您就可以存储并记住您上次找到第一个空单元格的 i 值,这样您就不必从头开始。

如果您实际上对 row 不感兴趣/col寻址,您可以忘记这些,只需使用输出迭代器来跟踪您当前的输出位置。

这是一个使用“迭代器”风格的演示(从 C++ 借用但完全是 C99)

typedef int data;
typedef data* output;

output add_next(data matrix[ROWS][COLS], output startpoint, data somevalue)
{
    if (output < (matrix + ROWS*COLS))
         *(output++) = somevalue;
    return output;
}

现在你可以说:

add_next(matrix, 42);
add_next(matrix, 9);

注意 输出迭代器假设连续存储,因此不能与所谓的 jagged arrays 一起使用

HTH

关于c - 测试数组的第一个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8292759/

相关文章:

C 添加对数组的引用,而不是值

php - 如何创建 PHP 多维数组

c++ - 从二维初始化数组访问值

c++ - 在不知道大小的情况下传递二维数组?

c - 在 Linux 中的特定 CPU 上运行进程? (不能用命令行指定)

cURL 链接错误 “unresolved external symbol _Curl_base64_enode”

c - 乘以七

c - 任务场模式和 mongrel2

javascript - JavaScript 中 +a++b 是什么意思?

php - 分组输出多维数组