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