无法弄清楚两个数组是否相等

时间:2014-03-27 04:50:47

标签: c++ arrays templates

我正试图找出一种方法来判断我的一个阵列是否比另一个更长。我得到了一个函数原型:

 template <typename T, typename U> bool equal(T *left, T *end, U *right);

其中left是第一个数组,right是第二个数组。 “end”属于第一个数组,它告诉我数组何时结束。当左数组小于第二个数组时,我遇到了一些复杂问题。因为我知道第一个数组的结束位置,所以我试图弄清楚第二个数组值是以值还是垃圾传递。

到目前为止,我有这个:

template <typename T, typename U>
bool equal(T *left, T *end, U *right)
{
  int i = 0;

  while(left + i != end)
  {
    if(*(left + i) == *(right + i))
    {
      ++i;
      continue;
    }
    else
      return false;
  }
  return true;
}

仅在数组大小相同时才有效。

测试它失败的地方:

static void TestEqual2(void)
{
  cout << "***** Equal2 *****" << endl;
  int i1[] = {-1, 2, 6, -1, 9, 5, 7};
  short i2[] = {-1, 2, 6, -1, 9, 5, 7, -1, -1, 8, -1};

  int size1 = sizeof(i1) / sizeof(int);
  int size2 = sizeof(i2) / sizeof(short);

  CS170::display(i1, i1 + size1);
  CS170::display(i2, i2 + size2);
  bool same = CS170::equal(i1, i1 + size1, i2);
  if (same)
    std::cout << "Arrays are equal\n";
  else
    std::cout << "Arrays are not equal\n";
}

std :: vector不受限制,也适用于循环。

1 个答案:

答案 0 :(得分:0)

您还需要跟踪正确数组的结尾。

模板     bool相等(T *左,T *结束,U 右,U 结束2)     {       int i = 0;

  while(left + i != end && right + i != end2)
  {
    if(*(left + i) == *(right + i))
    {
      ++i;
      continue;
    }
    else
      return false;
  }
  return left + i == end && right + i == end2; // return true only if both arrays have the same length
}

您还需要将对此功能的调用更改为

bool same = CS170::equal(i1, i1 + size1, i2, i2 + size2);