我想知道(只是为了知道)是否有一种方法可以用更简单的代码执行以下指令:(C ++)
if(a > b && a > c && a > d)
是否可以将其替换为以下内容:
if(a > b, c, d)
答案 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正在计算最大值。您可能不希望这样做,特别是如果b
和c
是又长又复杂且带有副作用的子表达式。
以例如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 ++代码生成器示例(例如bison,SWIG等)。您也可以使用一些通用的预处理器,例如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()
。