两个数组是否等于函数c ++

时间:2014-01-30 13:46:07

标签: c++ arrays function compare

我正在尝试执行与数组比较的函数,如果它们相同则返回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

4 个答案:

答案 0 :(得分:6)

以下可能会有所帮助:

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,则可以免费使用{{1}}。 (而且语法更友好)。

答案 1 :(得分:0)

要比较两个数组,您可以使用标准算法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;
}

答案 2 :(得分:0)

我认为它与H2CO3相同“什么才合格?”

使用std :: equal的方法与您提供的数组不匹配... std :: equal将采用相同的元素和顺序。

我修改了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 :: equal,你应该在

之前对它们进行排序

答案 3 :(得分:-1)

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

#include <algorithm>

int *ints;
ints = new int[10];

bool EqualArray(const Object& obj)
{
   return std::equal(ints,ints + 10, obj.ints);
}

当然,您也可以将operator==重载为其他内容。遗憾的是,您不能为原始数组重载它,因为只有在至少一个参数是类(或结构)类型时才允许重载运算符。但你可以覆盖它来比较矢量和数组。类似的东西:

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);
}

(这会引用未降级为指针的数组,先检查它的声明大小,因此是安全的。)