如何检查数组索引是否存在

时间:2014-12-05 15:24:12

标签: c++ c arrays indexing

我有一个指针* double数组,基本上,它们按任意顺序编制索引。

例如,

double[0][0] = 80.0
double[3][0] = 56.8
double[4][0] = 56.7

我如何检查double[1][2]是否存在,如果不存在则创建一个

我不打算使用vectors或任何'fancy',只使用普通数组。

1 个答案:

答案 0 :(得分:2)

嗯。好吧,如果你真的想用普通数组(为什么?),那么你可以做的并不多,只能依靠神奇的价值。我建议std::numeric_limits<double>::quiet_NaN()(NaN =不是数字)。也就是说:

#include <algorithm>
#include <limits>

double data[10][20]; // maximum dimensions mandatory with arrays. There's
                     // no way around that, and you can't grow it later.

std::fill(data[0], data[0] + 10 * 20, std::numeric_limits<double>::quiet_NaN());

然后您可以稍后检查数组中是否存在实际值,如下所示:

if(!std::isnan(data[1][2])) {          // #include <cmath> for std::isnan
  // oh, look, there's a value here!
} else {
  // Nothing here yet. Better fill it
  data[1][2] = 123.0;
}

警告:如果你的计算本身可能会产生NaN值,那么你就是这样做的。例如,如果您尝试计算0.0 / 0.0std::sqrt(-1)std::log(-1)或其他在实数中没有定义值的内容,则会发生这种情况。如果你的计算产生NaN并将它写入数组,那么这种方法就好像从未在那里写过这个值。