有没有更简单的方法可以做到:if(num1 > num2 && num1 > num3),以获得更大的变量列表进行比较?
is there a simpler way to do: if(num1 > num2 && num1 > num3), for bigger list of variables to compare?
我想知道(只是为了知道)是否有一种方法可以用更简单的代码执行以下指令:(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)
请注意,鲁斯兰的答案是计算最大值。你可能不想这样做,特别是如果b
和c
是长而复杂的副作用子表达式。
以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++)代码(然后你可以编译生成的文件,或#include
it等)。你也可以使用一些通用的预处理器,如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()
。
- EASTL矢量<向量<int>>连续的
- 'num1'未在此范围内声明
- istringstream,num1 和 num2 在这里发生了什么?
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 有没有更简单的方法可以做到:if(num1 > num2 && num1 > num3),以获得更大的变量列表进行比较?
- ``这个''不能用this-&gt;指针变量
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在