簡體   English   中英

無法找出兩個數組是否相等

[英]Can't figure out if two arrays are equal

我試圖找到一種方法來判斷我的一個數組是否長於另一個數組。 我得到了一個函數原型:

 template <typename T, typename U> bool equal(T *left, T *end, U *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超出限制以及for循環。

您還需要跟蹤正確的數組的末尾。

模板布爾等於(T *左,T *端,U 右,U end2){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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM