我正在尝试执行与数组相比,如果它们相同,则返回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);
}
(这需要引用不降级到指针的数组首先检查其声明的大小,因此是安全的)。