有没有更好的方法来比较C ++中的两个int数组。
struct integer
{
int *number;
int size;
};
这是我的结构,我使用了这个比较功能。我找到了这个解决方案,但它看起来像bulshit。
int BigInteger::biggest(integer number1, integer number2)
{
int biggest = 0;
if (number1.size > number2.size)
{
biggest = 1;
}
else if (number1.size < number2.size)
{
biggest = -1;
}
else
{
for (int i = number1.size; i >=0 ; --i)
{
if (number1.number[i] > number2.number[i])
{
biggest = 1;
return biggest;
}
else if (number1.number[i] < number2.number[i])
{
biggest = -1;
return biggest;
}
else
{
continue;
}
}
}
return biggest;
}
如果函数将值转为1,则number1大于number2
如果函数将值转为0,则number1等于number2
如果函数将值转为-1,则number2大于number1
答案 0 :(得分:4)
这不会改善任何事情,除非它更清楚
int BigInteger::biggest(integer number1, integer number2)
{
if (number1.size != number2.size)
return number1.size - number2.size;
for (int i = 0 ; i < number1.size; ++i) {
if (number1.number[i] == number2.number[i])
continue;
return number1.number[i] - number2.number[i];
}
return 0;
}
此功能
number1 > number2
number1 < number2
此外,在c ++中,您可以重载运算符,以便实现&gt;和&lt;使用此代码应该很容易。
答案 1 :(得分:0)
有一些小错误。您不需要这些代码。当它不属于某个类时,它会运行得稍快一些。只需稍加修改即可使用qsort()
(参数需要指针)(编辑:void指针)
struct integer
{
int *number;
int size;
};
int biggest(const integer &number1, const integer &number2)
{
int biggest = 0;
if (number1.size > number2.size)
{
biggest = 1;
}
else if (number1.size < number2.size)
{
biggest = -1;
}
else
{
for (int i = number1.size - 1; i >= 0; i--) // or --i, no difference
{
if (number1.number[i] > number2.number[i])
{
biggest = 1;
return biggest;
}
if (number1.number[i] < number2.number[i])
{
biggest = -1;
return biggest;
}
// don't need a continue statement here
}
}
return biggest;
}
答案 2 :(得分:0)
您可以使用std::mismatch()
这样的功能:
int BigInteger::biggest(integer a, integer b)
{
if (a.size != b.size)
return a.size - a.size;
const auto res = std::mismatch(a.number, a.number + a.size, b.number);
if (res.first == (a.number + a.size))
return 0;
else
return (*res.first) < (*res.second) ? -1 : 1;
}
函数biggest()
的名称非常具有误导性。 compare()
会好得多。此外,如果函数的返回类型是布尔值(true:a < b
),那么您可以使用std::lexicographical_compare()
,代码会更简单。