有没有一种更简单的方法:if(num1> num2 && num1> num3),以便比较更大的变量列表?

时间:2019-01-14 05:48:35

标签: c++ variables relational

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

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

是否可以将其替换为以下内容:

 if(a > b, c, d)

3 个答案:

答案 0 :(得分:9)

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

#include <iostream>
#include <algorithm>

int main()
{
    if(4 > std::max({2,3,6}))
        std::cout << "greater\n";
    else
        std::cout << "not greater\n";
}

答案 1 :(得分:1)

在对if(a > b, c, d)进行编码时,您正在使用comma operator(并且您不想这样做)。

我不明白您的确切要求。在所有情况下,计算机都有(有时)进行三个比较。为什么不能全部拼写?

您也许可以使用花哨的preprocessor技巧,但是在您的特定情况下,您不应该这样做。

当然,对if的测试可能是一个长表达式,它需要几行。像这样写

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

请注意,Ruslan's answer正在计算最大值。您可能不希望这样做,特别是如果bc是又长又复杂且带有副作用的子表达式。

以例如if (c > 1 && a > 1 && a > b && a > b/c)之类的测试为例;您依靠&&的惰性“然后”评估来避免被零除。

如果您想进一步了解C11,请参阅C reference并参考其标准n1570

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

C和C ++都精确定义了if语句可以是什么。

不要混淆C和C ++,它们是不同的编程语言,并且都在其标准规范中进行了指定。一些编译器,尤其是GCC,向他们提供了extensions。您有责任决定使用编译器特定的扩展或遵守语言标准(并希望您的代码可由遵守该标准的许多编译器编译)。

在某些特定情况下,您的测试(或C或C ++代码)是如此之长,而且如此重复,以至于您可以考虑采用某种metaprogramming方法:然后您将一些脚本(或某些元程序)编写为<在文件中em C(或C ++)代码(您以后可以编译生成的文件,或#include对其进行编译等)。有一些可以激发您灵感的C或C ++代码生成器示例(例如bisonSWIG等)。您也可以使用一些通用的预处理器,例如GPP或m4,或者让awk或python脚本(或其他C ++程序)生成一些C或C ++文件,等等。当然,您将配置{{ 3}}(例如您的build automation)。

答案 2 :(得分:-1)

使其更简单的一种方法是将值放入数组中并对其进行排序。由于您没有提供具体的示例,因此我无法说这是否对您的情况有所帮助,但是当您处理排序数组时,您可以执行以下操作:

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

最后,i将等于kMaxElements,或者将成为等于或大于a的项目的索引。

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