【C++】标准库 std::clamp 使用方法

std::clamp详解 / 使用大于比较器(降序)std::cout << "使用greater比较器: " << value << std::endl;//输出为5// 自定义比较函数std::cout << "使用自定义比较器: " << abs_value << std::endl;//输出为10那如果使用了自定义比较器,就像上面的例子,那么clamp的比较逻辑是什么呢?请看下面的介绍。return v;结合上面的介绍,可以得到上面的例子输出分别为5和10. 阅读详情

std::clamp 使用方法

基本信息

  • 所在头文件:algorithm (C++ 17及以上)
  • 所在命名空间:std
  • 函数原型:
// 共 2 个重载
template<class _Ty>
_NODISCARD constexpr const _Ty& clamp(const _Ty& _Val, const _Ty& _Min_val, const _Ty& _Max_val);

template <class _Ty, class _Pr>
_NODISCARD constexpr const _Ty& clamp(const _Ty& _Val, const _Ty& _Min_val, const _Ty& _Max_val, _Pr _Pred);

注:来自 MSVC 14.32.31326

解释

为了更好理解,我们对标准库的 std::clamp 整理一下,如下:

template<typename T>
constexpr const T& clamp(const T& value, const T& min_value, const T& max_value);

!!!注意:min_value 一定要小于等于 max_value

这里只展示比较常用的这个重载。

  做一个不恰当的比喻:正如名字 clamp – 钳子,利用参数 min_value 和 max_value 设置了一个范围,而这个范围就好比是 ”钳嘴“,将返回值限制在这个 ”钳嘴“ 之间,范围为 [min_value, max_value]。
 特别的是,返回值是一个引用,这个引用只会是 value,min_value 和 max_value 中的一个。

规则:

  • 若 value <= min_value,返回 min_value 的引用
  • 若 value >= max_value,返回 max_value 的引用
  • 若 min_value < value < max_value,返回 value 的引用

示例

#include <iostream>
#include <algorithm>
using namespace std;

void foo(int a, int b, int c)
{
	// 打印传入参数
	cout << "[ "<< a << " | " << b << " | " << c <<" ]" << endl;
	// 打印输出结果
	cout << "-> " << clamp(a, b, c) << endl << endl;
}

int main()
{
	foo(1, 10, 20);
	foo(10, 10, 20);
	foo(15, 10, 20);
	foo(25, 10, 20);
}

运行结果:
result

UE4中的C++知识 1. 变量命名首字母大写 2. 如果要在蓝图定义一个接口,需要在头文件中使用 UPROPERTY(EditAnywhere) 3. Action Mappings (动作映射)想象成"是或否"的输入,类似于鼠标按键或摇杆按键。 当在短时间内按键、松开、双击或按住不放时,它们会进行该项操作的汇报。 离散事件的动作,诸如跳跃、射击或与物体互动都可以使用这种类型的映射。 Axis Mappings 阅读详情

相关推荐

C++17 std::clamp深度剖析:用法、原理与避坑指南

数值边界处理是编程中最常见的需求之一,过去开发者常借助std::min与std::max的嵌套调用来实现区间约束,不仅代码冗长,还容易掩盖逻辑错误。C++17引入的std::clamp以更清晰、更安全的方式解决了这一问题。其内部通过两次比较和条件选择完成约束,返回值采用引用类型以避免拷贝开销,并支持constexpr编译期求值,为性能敏感场景提供了有力支撑。从传感器数据校准、游戏生命值锁定到图像像素处理,std::clamp均能简化代码、提升可读性。然而,要安全使用它,还需警惕参数顺序、临时对象悬挂引用、类

weixin_31315567的博客 161

【c++随笔】std::clamp

std::clamp函数接受三个参数:要限制的值v,下限lo和上限hi。因此,该函数确保返回的值始终在[lo, hi]的范围内。例子中,分别尝试将值3,6,10限制在5和7之间。以10为例,由于10大于7,因此std::clamp返回7,并将7赋值给kClamped ,然后输出这个限制后的值。std::clamp是C++标准库中的一个函数模板,用于限制给定值的范围在指定的上下限之间。总的来说,std::clamp函数用于确保值始终保持在预期的范围内,从而避免可能的错误或越界情况。

weixin_45574424的博客 5174

C++17 std::clamp函数详解:数值范围限制的最佳实践与性能优化

在数值计算和工程实践中,数值范围限制是一个基础且常见的需求,它确保数据在预设的合理区间内,避免因越界导致的逻辑错误或系统异常。其核心原理是通过比较操作将数值“夹紧”在上下界之间,实现数据的标准化与安全化。这一技术对于提升代码的健壮性和可维护性具有重要价值,广泛应用于图形渲染、游戏物理、UI布局、数据处理等场景。C++17标准库引入的std::clamp函数,正是将这一通用模式标准化、高效化的典范。它通过简洁的语法和编译器的深度优化,不仅提升了代码表达力,还避免了手写判断可能引入的错误,是现代C++编程中处理

weixin_32612263的博客 307

使用std::clamp函数判断圆和矩形是否重叠

std::clamp函数是C++标准库中的一个函数模板,用于限制给定值的范围在指定的上下限之间。std::clamp接受三个参数:value、lo和hi。它返回一个被限制在[lo, hi]范围内的值。如果value小于lo,则返回lo;如果value大于hi,则返回hi;否则返回value。本文介绍了如何使用C++标准库中的std::clamp函数来判断给定圆和矩形是否重叠。我们首先了解了题目的描述,然后详细介绍了std::clamp函数的用法。

bigBbug的博客 1461

C++ max/min函数进阶:从基础比较到高效算法实战

本文深入探讨了C++中`std::max`和`std::min`函数的高级用法,从基础语法到多值比较、自定义比较函数与Lambda表达式,再到性能优化与现代C++特性。通过实战案例展示了这些函数在游戏开发、GUI设计等场景中的应用,帮助开发者掌握高效算法实现与最佳实践。

weixin_31236101的博客 340

clamp:将一个值或一系列值限制在两个极端之间

钳位算法 一种简单的算法,用于限制一个值或一系列值落在两个极端之间。 clamp已经提出用于C ++ <algorithm>下文档号码库 。 将值限制在两个极端之间的代码可以通过各种伪装来实现。 从我们在(很久)前发现的正常情况来看: int clampedValue = value; if ( value < minValue xss=removed> maxValue ) clampedValue = maxValue; 通过: const int clampedValue = std::min( std::max( value, minValue ), maxValue ); 至: const int clampedValue = clamp( value, minValue, max

【C++17 library features】深入理解 C++17 标准库中的 std::clamp() 函数

`std::clamp()` 是 C++17 标准库中引入的一个实用函数,用于将一个值限制在指定的上下界之间。正如古人所言:“中庸之道”,`std::clamp()` 通过简洁的语法实现了对数值的有效约束,避免了繁琐的条件判断,使代码更加清晰易读。 从定义上看,`std::clamp()` 接受三个参数:要被约束的值、下界和上界。函数将返回不小于下界且不大于上界的值。如果要约束的值已经在范围内,则直接返回该值;否则,返回最近的边界值。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1903

MATLAB小白也能搞定!BCT脑网络分析工具箱安装与入门指南

本文为零基础用户提供了一份详尽的BCT脑网络分析工具箱安装与入门指南。从MATLAB环境配置、BCT工具箱下载与路径添加,到连接矩阵构建、节点度与聚类系数等基础指标计算,手把手带领神经科学研究者跨越编程门槛,快速掌握脑影像数据分析的核心流程。

threejs5artist的博客 1092

CppWeekly 05 nested namespace and std::clamp

这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。 022 Nested namespaces 这个是C++17的新特性,可以创建嵌套的namespace时将他们连写在一起,有时候很方便。 namespace orgnization { namespace component { namespace subclass { struct A { }

风海流的豪赌 690

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

【ADCU详解】PMIC电源管理集成电路详解

自动驾驶域控制器(ADCU)中的电源管理集成电路(PMIC)是高度集成的关键部件,负责为计算核心、传感器等提供高效稳定的多路电源。其核心特点包括:符合车规AEC-Q100标准、支持功能安全ASIL等级、精确的时序控制及强抗干扰能力。PMIC由开关稳压器、LDO、时序控制器、监控保护电路等模块组成,通过分层电源树框架实现电能分配。设计需考虑效率、功率密度、噪声性能等关键维度,底层基于Buck转换器和LDO原理工作。使用中需满足严苛的车规环境要求,并通过静态/动态测试及故障注入测试进行验证,确保系统可靠性和安全

qq_40844444的博客 841

Qt工作总结07 <qBound和std::clamp>

qBound()和std::clamp的学习

Gnar_w的博客 1293

基于JavaFX的Http Server模拟器

源码地址 GitHub - DayRain/http-server-simulator: http server 模拟器 功能描述 HttpServer模拟器,通过简单的配置即可模拟第三方服务端,用于接收和响应HTTP请求。 支持同时模拟多个服务、动态添加接口、动态配置返回值。 使用说明 运行 exe运行 编译代码后,点击exe直接运行 代码运行 下载好代码后,运行主类ApplicationStarter即可 新建服务 主界面如下 点击 文件-新建 创建新的服务 ...

小楼夜听雨的博客 2534

C++17中的std::clamp:限制值的范围

std::clamp是C++17标准库中所定义的一个算法,它位于头文件当中。该函数的作用是将值v限制在lo和hi之间。若v小于lo,则返回lo;若v大于hi,则返回hi;否则返回v。需要特别注意的是,lo必须小于或等于hi,不然行为是未定义的。std::clamp不仅适用于整数,对于浮点数和自定义类型(只要这些类型支持比较操作)同样适用。int x, y;return 0;解释对于浮点数,std::clamp能够正常发挥作用。对于自定义类型Point。

码事漫谈 1901

ic后端学习笔记-floorplan

floorplan是布图规划,规划包括定义芯片的大小,定义芯片内各种模块、hard macros(硬核。比如RAM,ROM及其他IP模块等)、IO等的大小和位置,有时候还需要提前定义一些placement blockages,groups/regions等等,是后端设计的第一步,也是后续所有P&R工作的基础。floorplan与placement的区别是。

tfrofc的博客 5830

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1284

本周小贴士#231:来去之间:一些容易忽视的算法

在最近的 C++ 版本中,标准库新增了一些专用函数,用于在两个点 x 和 y 之间提供某个(特定的!)点:std::clamp(C++17 引入),以及 std::midpoint 和 std::lerp(C++20 引入)。将这些函数模板添加到标准库有两个主要目的:建立通用术语(词汇),便于广泛识别这些操作的含义。提供高质量实现,尤其是 std::midpoint 和 std::lerp,以避免常见陷阱。所有这些操作都是 constexpr 的,这意味着它们既可在运行时使用,也可在编译时使用。

飞鹤的程序员人生 301

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上)

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上):慢时钟域到快时钟域!

悟已往之不谏 知来者之可追 1544

C++标准库最小/最大操作:一份综合性分析报告

C++标准库最小/最大操作技术分析 本文系统分析了C++标准库中的最小/最大操作算法,涵盖基础值操作(std::min/max, std::minmax, std::clamp)和范围操作(std::min_element等)两大类。研究显示,这些算法从C++98到C++20经历了显著演进:C++11引入initializer_list和同步极值获取(std::minmax),C++14支持constexpr编译期计算,C++17新增值界定(std::clamp),C++20提供基于范围的现代化版本。性能分

greenspan的专栏 1119

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5242

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

每周贴士 #231: 两点之间:一些稍被忽视的算法

最近的一些C++版本中,标准库加入了一些函数,他们的唯一任务就是提供两点(x和ystd::clamp(来自C++17)和std::lerp(来自C++20)。把这些函数模板加入标准库有两个目的。第一,统一这些操作的术语——这点很容易被认识到;第二,特别是和std::lerp的情况,它提供了高质量的实现以避免常见的错误。所有这些操作都是constexpr,意味着既能用在运行期又能用在编译期。支持的输入数据类型取决于特定的操作,而且和std::clamp还提供了额外的灵活性。详情如下。std::clamp。

C++强迫症 143

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++11标准模板(STL)- 算法库 - 最小/最大操作 - 在一对边界值间夹逼一个值(std::clamp)

1) 若 v 小于 lo ,则返回 lo ;若 v 大于 hi ,则返回 hi ;否则返回 v 。使用 operator< 比较值。 2) 同 (1) ,不过使用 comp 比较值。 若 lo 的值大于 hi 则行为未定义。

qq_40788199的博客 985

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

std::clamp实战指南:C++17数值约束与边界处理技巧

在C++开发中,数值边界约束是高频需求,从手写if判断到std::min/max组合,代码冗长且易错。C++17引入的std::clamp以简洁语义和零成本抽象,成为范围限制的标准利器。本文从函数签名与实现原理出发,剖析其引用返回特性、严格弱序要求及NaN陷阱,并通过传感器数据清洗等场景展示其在数据处理流程中的实际应用。结合性能分析与编译器优化,说明为何std::clamp能替代手写逻辑。同时讨论生命周期悬空、上下界颠倒等常见坑,并延伸至safeClamp定制与std::lerp组合,帮助开发者构建数值安全

weixin_31742871的博客 250

C++ std::min和std::max的细节陷阱:从重载、引用到比较器

在C++开发中,标准库算法是构建可靠代码的基石,而最基础的std::min和std::max函数却常常被低估。它们的重载形态与模板推导规则,以及返回引用的设计,隐藏着悬垂引用和生命周期管理的巨大风险;自定义比较器时,对严格弱序的遵循程度直接决定了算法的正确性。理解这些底层原理,不仅能在Windows下规避宏冲突、在浮点数比较中避开NaN陷阱,还能让字符串比较、容器极值查询等应用场景变得安全高效。从C++11的算法精要到C++20 ranges的投影支持,掌握这些细节,才能真正发挥标准库的工程价值。

weixin_30231327的博客 198

深入理解C++ std::min/max:类型推导、悬垂引用与宏陷阱

C++标准库的std::min和std::max是日常开发中常用的工具函数,但隐藏着许多容易被忽视的细节。它们基于模板实现,要求两个参数类型一致,否则会触发模板推导失败;同时返回引用而非值,若实参为右值,极易产生悬垂引用问题。在Windows平台,Windows.h中的min/max宏会污染命名空间,导致代码无法编译。深入理解这些原理,不仅能避免编译错误和运行时崩溃,还能借助constexpr实现编译期计算,利用C++20的ranges版本简化代码。掌握这些技术细节,有助于写出更健壮、可移植的C++代码,无

weixin_29698641的博客 85

C++17 std::clamp实战:限幅函数的用法、陷阱与工程实践

数值限幅是C++开发中极为常见的基础操作,从传感器数据校验到图形界面坐标约束,都依赖将变量安全限制在指定区间。C++17标准库提供的std::clamp函数,以简洁的模板接口和constexpr能力,取代了手写if-else与嵌套min/max的混乱实现。它通过operator<或自定义比较器定义边界规则,并保持返回值引用语义。然而,使用不当也会陷入未定义行为、类型推导失败、悬挂引用及NaN透传等陷阱。本文结合工程事故,系统梳理std::clamp的正确用法、四个关键隐坑,并展示其与transform、折叠

weixin_32642109的博客 87
上一篇: C++ 遍历 char* 数组 / char**
下一篇: Debian 11 驱动问题解决方法
AnpyD
博客等级 码龄7年 1粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值