检查 C 样式数组是否等于其他(编译时)数组



我有一个double[9],想检查它是否包含值(1,0,0,0,1,0,0,0,0,1)。有没有比这更清洁的方法?

if (ornt1[0] == 1 && ornt1[1] == 0 && ornt1[2] == 0
 && ornt1[3] == 0 && ornt1[4] == 1 && ornt1[5] == 0
 && ornt1[6] == 0 && ornt1[7] == 0 && ornt1[8] == 1 )

我正在使用C++。

严格

比较双精度值不是一个好主意。我建议您创建一个常量数组进行比较,然后使用循环并使用公差(例如 1e-9):

bool doublesEqual(double a, double b) {
  return fabs(a - b) < 1e-9;
}
const double expected[9] = {1,0,0,0,1, 0, 0, 0, 1};
bool equal = true;
for (int i = 0; i< 9; ++i) {
  if (!doublesEqual(expected[i], ornt1[i])) {
    equal = false;
    break;
  }
}
if (equal) { // do smth

编辑:按照John Zwinck的建议,我已经编辑了代码,以便能够处理我们比较的数组仅包含NAN的情况。我稍微编辑了他的建议,以使代码更具可读性。请参阅他在下面的评论,以澄清为什么需要这样做。

最新更新