Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有一种更简单的方法:if(num1>;num2&;num1>;num3),用于比较更大的变量列表?_C++_Variables_Relational - Fatal编程技术网

C++ 是否有一种更简单的方法:if(num1>;num2&;num1>;num3),用于比较更大的变量列表?

C++ 是否有一种更简单的方法:if(num1>;num2&;num1>;num3),用于比较更大的变量列表?,c++,variables,relational,C++,Variables,Relational,我想知道(只是为了知道)是否有一种方法可以用更简单的代码执行以下指令:(C++) 是否可以将其替换为以下内容: if(a > b, c, d) 使用标题中的std::max(std::initializer\u list),如下所示: #include <iostream> #include <algorithm> int main() { if(4 > std::max({2,3,6})) std::cout <<

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

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

 if(a > b, c, d)
使用
标题中的
std::max(std::initializer\u list)
,如下所示:

#include <iostream>
#include <algorithm>

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

std::cout简化的一种方法是将值放入数组并对其进行排序。由于您没有给出具体示例,我无法说明这是否有助于您的案例,但在处理排序数组时,您可以执行以下操作:

int i = 0;
while ((a < array[i]) && (i < kMaxElements))
{
    i++;
}
inti=0;
而((a
最后,
i
要么等于
kMaxElements
,要么等于或大于
a
的项目索引

更好的是,你可以对数组进行二进制搜索,找到一个特定的元素。在C++中有具体的算法。具体看,和./p>< p>当你编码<代码>(A>B,C,D)< /C> >你使用(并且你不想)。 我不明白你到底在问什么。在所有情况下,计算机(有时)都要做三个比较。为什么你不能把它们全部拼出来

你也许可以使用花哨的把戏,但在你的特殊情况下,你不应该

当然,
if
的测试可能是一个需要几行的长表达式

if (a > b
    && a > c
    && a > d
    && somelongandcomplexcondition(a,b,c)
    && a*a > 34)
请注意,正在计算最大值。您可能不想这样做,特别是如果
b
c
是长而复杂的子表达式,并且有副作用

例如,考虑一个测试,如
if(c>1&&a>1&&a>b&&a>b/c)
;您依赖于对
&&
的“惰性”和“然后”求值来避免被零除

如果您想了解更多,请参阅一些并参考其标准

如果您想了解更多,请参阅一些并参考其标准(或其他更年轻的标准,如)

<> > C和C++都精确定义了< <代码> > 语句。

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


在某些特定的情况下,您的测试(或C或C++代码)如此长,如此重复,您可以考虑一些方法:然后编写一些脚本(或一些元程序)来在文件中发射C(或C++)代码(并且您可以稍后编译生成的文件,或者<代码>包含它等)。有几个C或C++代码生成器(例如,等等)可能会启发你的例子。你也可以使用一些类似于M4的通用预处理器,或者让你的AWK或Python脚本(或者你的C++程序)生成一些C或C++文件等等。当然,你会配置你的(例如你的)。对于这种特殊情况。

您可以使用宏或函数(c++类运算符也可以重载),这可能会有所帮助,但除此之外,还有很长的路要走,或者是否有一个带有特殊函数的库可以满足我的需要?嗯,仅仅为了找到最大值排序不是一个好主意……它是O(n log n)而不是O(n).二进制搜索的想法也是可疑的-如果您只需要检查O(1)中的最后两个元素,为什么要在log(n)time中查找索引时间?关键是OP没有指定他们要做什么,看起来他们正在试图找出一组数字中某个特定值的位置。如果对数据进行排序,则更容易进行排序。数据可能已经排序,因此不需要通过O(n log n)进行排序算法。我们不知道,因为没有给出上下文。在已经排序的数据的上下文中,搜索可能比比较每个值更快得到有用的结果。这就是我在这里想说的。聪明的代码,但我不认为这正是OP想要的。我同意原来的问题不是很清楚。谢谢!它修复了由于我的懒惰,我遇到了一个“问题”。我试图编写一个包含大量数字和输入的代码来进行比较,极大地减少了字符的数量。如果(a>std::max({b,c})和&d>std::max({b,c}){std::cout@YaRmgl为什么不试试呢?因为我不在我的电脑上,这就是原因
if (a > b
    && a > c
    && a > d
    && somelongandcomplexcondition(a,b,c)
    && a*a > 34)