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

时间:2015-01-08 14:11:09

标签: c++

我有一个double[9]并想检查它是否包含值(1,0,0,0,1,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 ++。

1 个答案:

答案 0 :(得分:6)

严格比较双值不是一个好主意。我建议你创建一个常数数组进行比较,然后使用一个循环并使用公差(例如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时能够处理这种情况。我已经编辑了他的建议,使代码更具可读性。请参阅下面的评论,以澄清为何需要这样做。