有没有更简单的方法可以做到:if(num1 > num2 && num1 > num3),以获得更大的变量列表进行比较?

is there a simpler way to do: if(num1 > num2 && num1 > num3), for bigger list of variables to compare?

本文关键字:num1 gt 变量 列表 比较 num3 if 方法 num2 有没有 更简单      更新时间:2023-10-16

我想知道(只是为了知道)是否有一种方法可以用更简单的代码执行以下指令:(C++)

if(a > b && a > c && a > d)

有可能用这样的东西代替它吗:

if(a > b, c, d)

<algorithm>标头中使用std::max(std::initializer_list<T>),如下所示:

#include <iostream>
#include <algorithm>
int main()
{
if(4 > std::max({2,3,6}))
std::cout << "greatern";
else
std::cout << "not greatern";
}

当您对if(a > b, c, d)进行编码时,您正在使用逗号运算符(您不希望这样做)。

我不明白你到底在问什么。在所有情况下,计算机都必须(有时)进行三次比较。为什么你不能把它们都拼出来?

您也许可以使用一些奇特的预处理器技巧,但在您的特定情况下,您不应该这样做。

当然,if的测试可能是一个需要几行的长表达。写这样的东西是可以接受的,也是常见的

if (a > b
&& a > c
&& a > d
&& somelongandcomplexcondition(a,b,c)
&& a*a > 34)

请注意,鲁斯兰的答案是计算最大值。你可能不想这样做,特别是如果bc是长而复杂的副作用子表达式。

if (c > 1 && a > 1 && a > b && a > b/c)这样的测试为例;你依赖于&&的懒惰的"然后"评估来避免被零除。

如果你想了解更多关于C11的信息,请参阅一些C参考资料,并参考其标准n1570。

如果你想了解更多关于C++11的信息,请参阅一些C++参考资料,并参考其标准n3337(或其他一些更年轻的标准,如C++17)。

C和C++都精确地定义了什么是if语句

不要混淆C和C++,它们是不同的编程语言,并且都在它们的标准规范中指定。一些编译器,特别是GCC,为它们提供扩展。您有责任决定使用编译器特定的扩展或坚持语言标准(并希望您的代码能够被许多遵守该标准的编译器编译)。

在某些特定情况下,你的测试(或你的C或C++代码)太长,重复性太强,所以你可以考虑一些元编程方法:然后你会在一个文件中编写一些脚本(或一些元程序)来发出C(或C++)代码(然后你可以编译生成的文件,或#includeit等)。你也可以使用一些通用的预处理器,如GPP或m4,或者让你的awk或python脚本(或其他C++程序)生成一些C或C++文件,等等。当然,你会为这种特殊情况配置你的构建自动化(例如Makefile)。

简化的一种方法是将值放入数组中并进行排序。由于你没有给出一个具体的例子,我不能说这是否对你的情况有帮助,但当你处理排序数组时,你可以做一些事情,比如:

int i = 0;
while ((a < array[i]) && (i < kMaxElements))
{
i++;
}

最后,i将等于kMaxElements,或者它将是等于或大于a的项的索引。

更好的是,您可以对数组进行二进制搜索,以找到特定的元素。在C++中,<algorithm>工具中对此有特定的算法。具体参见binary_search()lower_bound()upper_bound()