比较 C 中的两个 int 数组
Comparing two int arrays in C
有没有更好的方法来比较C++中的两个 int 数组。
struct integer
{
int *number;
int size;
};
这是我的结构,我使用了这个比较函数。我找到了这个解决方案,但它看起来像胡说八道。
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,则数字 1 大于数字 2
如果函数将值转换为 0,则数字 1 等于数字 2
如果函数将值转换为 -1,则 number2 大于 number1
这不会改善任何东西,除了它更清楚
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;
}
此函数
- 返回
- > 0,然后返回
number1 > number2
返回 - <0>,然后返回
number1 < number2
- 如果相等,则为 0
此外,在 c++ 中,您可以重载运算符,因此使用此代码实现>和<应该很容易。>
有一些小错误。 您不需要其中一些代码。当它不属于类时,它的运行速度会稍快一些。只需稍作修改,它就可以与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;
}
<</div>
div class="answers"> 您可以像这样使用 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()
,代码会简单得多。
相关文章:
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 在c++中获取两个大int,并将它们存储在数组中
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 比较两个整数在C++中与未知 int 类型的相等性
- 如何将具有两个通道的垫子转换为矢量<int><矢量>?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 为什么 fdump-class-hierarchy 为虚函数提供了两个指针 int vtable
- 分解打包的 int 值并将其拆分为两个组件 c++
- 将两个 int 数组相乘
- 比较 C 中的两个 int 数组
- 将彼此平行的两个 int 向量的元素求和
- 无论如何,是否可以使用setCursorPos(int,int)函数,但没有采用两个int使它需要速度较慢的两倍
- C 双重不能等于两个INT分裂
- 是一个包含两个INT(只有两个INT)的结构,保证是大小(INT)的两倍
- 带有两个INT列表的结构将减少为一个INT
- C 比较两个INT,错误或Wierd End
- 需要对两个 int 数组的总和进行细分
- 在对象上重载 sum 运算符时,无法可靠地将两个 int 数组加在一起?
- 在c/++中将浮点数转换为两个int
- 在c++中什么使用更多的内存?两个int型或两个函数