是两个阵列等于函数C



我正在尝试执行与数组相比,如果它们相同,则返回true。现在,数组很简单,它将在以后进行进步,但我被卡在testEqual功能上。所以这是代码

int n = 5;
int array[5] = {5,10,3,4,7};
bubbleSort(pole,n);
int array2[5] = {3,4,5,7,10};
testEqual( array , array2 , "bubbleSort");

这是testEqual功能,我需要在数组上重新制作,但我不知道如何。

bool testEqual(int i1, int i2, const string testName) {
    bool myresult = (i1 == i2);
    return myresult;
}

其他功能(例如Bubblesort)很好,我只需要重新制作testEqual

以下可能会有所帮助:

template <typename T, std::size_t N>
bool isEqual(const T (&lhs)[N], const T (&rhs)[N])
{
    return std::equal(std::begin(lhs), std::end(lhs), std::begin(rhs));
}

如果您使用std::array,则可以免费使用。(语法更友好)。

要比较两个数组,您可以使用标准算法std::equal

例如

bool testEqual( const int *first1, const int *last1, const int *first2, const int *last2 )
{
    return std::equal( first1, last1, first2, last2 );
}

它可以称为以下方式

testEqual( array, array + 5, array2, array2 + 5 );

至于您的功能,它无效。

它只是比较了两个整数,尚不清楚第三个参数的含义

是什么含义。
bool testEqual(int i1, int i2, const string testName) {
    bool myresult = (i1 == i2);
    return myresult;
}

我看到它与H2CO3相同的"有资格等于?"

std :: quale的方法与您提供的阵列不匹配... std ::等等将采用相同的元素和顺序。

我从cplusplus.com

修改了示例
int main () {
  int myints[] = {20,40,60,80,100};               
  int myints2[] = {20,100,60,40,100};               
  std::vector<int>myvector (myints2,myints2+5);     // myvector: 20 40 60 80 100
  // using default comparison:
  if ( std::equal (myvector.begin(), myvector.end(), myints) )
    std::cout << "The contents of both sequences are equal.n";
  else
    std::cout << "The contents of both sequences differ.n";
  return 0;
}

导致

The contents of both sequences differ.

因此,对于使用std ::相等,您应该在

之前对它们进行排序

您也可以使用std::equal。例如:

#include <algorithm>
int *ints;
ints = new int[10];
bool EqualArray(const Object& obj)
{
   return std::equal(ints,ints + 10, obj.ints);
}

当然,您还可以超载operator==的其他因素。不幸的是,您不能为原始数组超载它,因为仅当至少一个参数是类(或struct)类型时,才允许超载运算符。但是您可以将其覆盖以将向量与数组进行比较。类似:

template<typename T, typename Alloc, size_t S>
bool operator==(std::vector<T, Alloc> v, const T (&a)[S])
{
    return v.size() == S && std::equal(v.begin(), v.end(), a);
}

(这需要引用不降级到指针的数组首先检查其声明的大小,因此是安全的)。

相关内容

  • 没有找到相关文章

最新更新