C++ 中 min 和 max 函数的使用

2023-11-26

从 C++ 来看,有std::min and std::max优于fmin and fmax?为了比较两个整数,它们提供基本相同的功能吗?

您是否倾向于使用这些函数集中的一组,还是更喜欢编写自己的函数(也许是为了提高效率、可移植性、灵活性等)?

Notes:

  1. C++ 标准模板库 (STL) 声明min and max标准 C++ 中的函数算法 header.

  2. C 标准 (C99) 提供了fmin and fmax标准 C 中的函数math.h header.


fmin and fmax专门用于浮点数(因此是“f”)。如果将其用于整数,则可能会因转换、函数调用开销等而遭受性能或精度损失,具体取决于您的编译器/平台。

std::min and std::max是模板函数(在标头中定义<algorithm>) 适用于任何小于 (<) 运算符,因此它们可以对允许进行此类比较的任何数据类型进行操作。如果您不想让它发挥作用,您也可以提供自己的比较函数<.

这更安全,因为当参数具有不同类型时,您必须显式转换参数以进行匹配。例如,编译器不会让您意外地将 64 位 int 转换为 64 位 float。仅凭这个原因就应该使模板成为您的默认选择。 (归功于 Matthieu M 和 bk1e)

即使与浮动模板一起使用may赢在性能上。由于源代码是编译单元的一部分,因此编译器始终可以选择内联调用模板函数。有时是不可能的另一方面,内联对库函数的调用(共享库、缺乏链接时优化等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中 min 和 max 函数的使用 的相关文章

  • 将 ARGB 拆分为字节值

    我有一个 ARGB 值存储为 int 类型 它是通过调用 ToArgb 来存储的 我现在想要来自 int 值的各个颜色通道的字节值 例如 int mycolor 16744448 byte r g b a GetBytesFromColor
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 可以通过模板间接访问基类中的私有类型

    我试图在编译时根据类型是否在给定范围内公开可用来选择要使用的类型 最好直接看代码 include
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用左连接获得不适当的输出

    我正在尝试获取变体列表 并且对于每个变体都获取所有subvariants list无论子变体属于何处 特别的Test say 100 这是示例数据 Id TestId SourceSubVariantId TargetSubVariantI
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 当分配返回 0 时,具有空异常规范的运算符 new 调用构造函数

    我有以下声明 void operator new size t s PersistentMemory m throw return m gt allocatePersistentMemory s 我正在测试启动时的内存耗尽 这会导致m gt
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 链接到ntdll.lib并调用ntdll.dll内部的函数

    我最近正在对私有 API 进行一些研究 我尝试调用诸如NtOpenFile在 ntdll dll 中LoadLibrary and GetProcAddress在运行时 幸运的是 它成功了 今天早上我在电脑上进行了文件搜索 发现ntdll
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 推断“x => { throw .. }”的 Lambda 与重载方法中的 Func 匹配吗?

    我不明白为什么 C 最终在以下 LINQPad 代码中执行不正确的扩展方法 void Main Actual Sync Action Expected Sync Action Run x gt x Dump Actual Async Tas
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 我可以在 Android 上的多个线程中使用同一个 RoomDatabase 对象吗?

    我在 Android 上使用 Room 持久性库 目前 每次访问数据库时我都会有一些额外的同步代码 我想知道这段代码是否必要 我目前作为单例访问数据库 这就是我目前将对象插入数据库的方式 Insert values into DB fina
  • 无法启动mongodb本地服务器

    我是 mongodb 新手 当我尝试运行 mongodb 本地服务器时mongod命令无法运行并引发此错误 usr lib mongodb mongod help for help and startup options Sat Jun 2
  • PIL 合并两个带有 alpha 通道的图像 - 未按预期工作

    这里有很多关于 SO 的问题 它们提供了当前问题的答案 但是输出不是预期的 目标是合并两个 RGBA 图像 每张图像的alpha通道信息都不相同 当前 简化 代码是 from PIL import Image image 1 png wat
  • PHP - 让我的查询数组的键成为 ID

    所以我拉了这个图像数组 数组的键只是 0 1 2 3 4 5 等等 如何将该表的 id 列中的值作为键 并将 link 保留为值 关联数组 不是吗 这是我的 PHP myImageID me imageid findImages SELEC
  • pysftp 库无法在 AWS lambda 层中工作

    我想使用将文件上传到 EC2 实例pysftp库 Python 脚本 所以我创建了一个小的Python脚本 它使用下面的行来连接 pysftp Connection host Constants MY HOST NAME username
  • 当我想要选择物品来尽可能填满容器时,它叫什么 - 我应该使用什么算法?

    我有一个问题如下 给定的物品类型重量为 w1 w2 w3 wn 每一项的 这些类型的数量是无限的 你有一个能够承载重量W的容器 找到具有最大权重总和的项目组合 将装入容器中且不超过最大重量 W 例如 我有三种类型的带有重量的物品 w 5 w
  • PHPMailer 无法连接到 SMTP 主机

    出现以下错误 SMTP gt 错误 无法连接到服务器 php network getaddresses getaddrinfo 失败 不知道这样的主机 0 SMTP 错误 无法连接到 SMTP 主机 发送此邮件时出现问题 这是我的配置文件设
  • 在控制台中禁用 Rails SQL 日志记录

    当我在控制台中执行命令时 有没有办法禁用 SQL 查询日志记录 理想情况下 如果我可以禁用它并使用控制台中的命令重新启用它 那就太好了 我正在尝试调试某些内容并使用 puts 打印出一些相关数据 然而 sql 查询输出使其难以阅读 Edit
  • 测试失败+异常的截图

    你们中有人知道对测试失败和异常进行屏幕截图的可能解决方案吗 我在中添加了以下代码TearDown 但结果它也会对通过的测试进行截图 所以这不是最好的解决方案 DateTime time DateTime Now string dateTod
  • 作为服务器进程读取 Excel 文件

    我正在尝试找到一种适当的方法来读取 NT 服务器操作系统上的 Excel 文件的内容 我在使用 Excel API 时遇到了很多问题 然后遇到了官方微软办公自动化其中指出 Excel API 不适合 Excel 自动化 我看到的问题与文章中
  • 防止 AngularJS 中的退格键导航回来

    我在 AngularJS Web 应用程序中遇到了这个问题 当用户进入需要填写表单的页面并开始输入时 如果他按退格键并且焦点不在输入文本上 则页面将转到之前的状态 我抬头这个解决方案使用 jQuery 但这似乎不是在 AngularJS 中
  • Eclipse 中的 Tomcat:它运行但在启动过程中超时

    我正在使用 Tomcat 7 在 Eclipse Helios 中运行 java web 应用程序 服务器成功启动 指示了持续时间 但是 Eclipse 的进度条仍然旋转 表示 Tomcat 正在启动 最终达到超时并抛出错误 我相信 Tom
  • C++:为什么 bool 是 8 位长?

    在 C 中 我想知道为什么 bool 类型是 8 位长 在我的系统上 而只有一位就足以保存布尔值 我曾经认为这是出于性能原因 但是在 32 位或 64 位机器上 寄存器为 32 或 64 位宽 性能优势是什么 或者这只是这些 历史 原因之一
  • 单击时更改锚点的颜色

    我希望当我单击此链接时 它的颜色会更改为给定的颜色 li a href Press a li CSS 声明 active将实现你所追求的 http www w3schools com CSS pr pseudo active asp Exa
  • 在 Django 管理更改/添加页面中显示外键数据

    我试图让一个模型的属性显示在另一个模型的 Django 管理更改 添加页面中 这是我的模型 class Download model Model task models ForeignKey Task class Task model Mo
  • 重现RabbitMQ网络分区场景

    我想重现网络分区场景具有所有三种模式 ignore autoheal and pause minority 我怎样才能实现这个目标 我尝试停止 sbin service restart 集群的节点之一 但这并没有导致任何网络分区 我还尝试删
  • 在 Android 中以编程方式打开 ServiceMode 菜单

    如何打开安卓服务模式在三星手机上以编程方式菜单 手动的话 我可以通过拨打ussd代码 0011 来完成 这是一个挑战 我花了几个小时寻找解决方案 但恐怕我没有好消息 1 第一次尝试 Intent ACTION DIAL 确实 一开始 可以直
  • R-更改数据框中列的编码?

    我正在尝试更改数据框中列的编码 stri enc mark data updated text 1 UTF 8 ASCII ASCII UTF 8 ASCII ASCII UTF 8 UTF 8 UTF 8 10 ASCII ASCII U
  • not() 和ends-with() 的Xpath 错误

    我有以下 Xpath 表达式 not input ends with Copyright 我希望它能够为我提供所有元素 输入除外 以及以 版权 结尾的任何属性值 我在 Selenium 2 Java API 中执行它webDriver fi
  • C++ 中 min 和 max 函数的使用

    从 C 来看 有std min and std max优于fmin and fmax 为了比较两个整数 它们提供基本相同的功能吗 您是否倾向于使用这些函数集中的一组 还是更喜欢编写自己的函数 也许是为了提高效率 可移植性 灵活性等 Note