比较C中的两个int数组

时间:2017-02-04 16:15:03

标签: c++ arrays

有没有更好的方法来比较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

3 个答案:

答案 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;
}

此功能

  • 返回&gt; 0 然后number1 > number2
  • 返回&lt; 0 然后number1 < number2
  • 如果相等则为0

此外,在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(),代码会更简单。