【问题标题】:Determine the largest number among three numbers using C++使用 C++ 确定三个数字中的最大数字
【发布时间】:2018-05-04 23:56:14
【问题描述】:

如何使用 C++ 确定三个数中的最大数?

我需要简化一下

 w=(z>((x>y)?x:y)?z:((x>y)?x:y));

条件不会简化这一点。

【问题讨论】:

标签: c++


【解决方案1】:

oisyn's answer(使用初始化列表)和Bathesheba's answer(不调用副本)的变体是使用std::ref创建引用的初始化列表,然后通常使用std::max

using std::ref;
w = std::max({ref(x), ref(y), ref(z)});

这只有在创建引用比创建副本更便宜的情况下才有优势(并且不适用于int 之类的原语)

Demo

【讨论】:

  • 我们真的要让 ADL 开放吗?
  • @StoryTeller:我认为它比传递我自己的 lambda 进行比较更清晰。
  • 我的意思是ref。我们明确想要std::ref 的结果。如果用户类型定义了一个 ref 函数,它完全做其他事情,这将中断。
  • @StoryTeller:确实。 IMO 可能不太可能。我的个人风格是始终限定标准命名空间;为了便于阅读,我在这里添加了using。这当然是每个程序员在使用 ADL 时都需要牢记的事情。
【解决方案2】:

从C++11开始,可以做

w = std::max({ x, y, z });

【讨论】:

  • @Bathsheba - 但是(而且它很大)你的预制件没有副本。这个我敢打赌复制所有元素(尽管我不会鼓励任何人基于此过早优化)。
  • @StoryTeller:小心:我今天已经对你的 2 个答案投了赞成票。
  • 我猜! Stackoverflow 正在转向交易信誉网站! :D
  • @StoryTeller 这个论点是双向的。在std::max 的双参数版本中,参数通过引用传递。对于内置数字类型或小型 POD 类型,传递值通常比传递引用和取消引用函数本身中的引用便宜。在实践中,它可能都会被内联。但是,是的,很好,这是值得考虑的事情。
  • @NehaGupta - 几乎没有。芭丝谢芭和我只是碰巧经常出现相同的标签,并进行友好的玩笑。
【解决方案3】:

使用简单的if 条件

int w = x;

if(y > w)
  w = y;
if(z > w)
  w = z;

其中w 是三个中的最大值。

【讨论】:

    【解决方案4】:

    大 = a > b ? (a > c ? a : c) : (b > c ? b : c) ;

    【讨论】:

    • @YSC 我可以知道为什么吗?
    • 你会相信它在导弹制导系统中吗?
    • 如果它在导弹制导系统中,你敢维护它吗?
    • @Bathsheba 不是最好的例子:我想说,如果制导导弹工程师编写了那种软件,世界会变得更美好……
    • 可读性一路走好。
    【解决方案5】:
    w = std::max(std::max(x, y), z);
    

    是一种方式。

    【讨论】:

    • 我认为他正在尝试使用条件运算符。
    • @NehaGupta 然后OP应该将其添加到他们的问题中=)
    • @NehaGupta:为什么?
    猜你喜欢
    • 1970-01-01
    • 2022-11-23
    • 2018-09-10
    • 2022-11-18
    • 2018-08-06
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多