- algorithm[meta header]
- std::ranges[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std::ranges {
template<class T, class Proj = identity,
indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less>
constexpr const T& clamp(const T& v, const T& lo, const T& hi, Comp comp = {}, Proj proj = {});
}
- identity[link /reference/functional/identity.md]
- indirect_strict_weak_order[link /reference/iterator/indirect_strict_weak_order.md]
- projected[link /reference/iterator/projected.md]
- ranges::less[link /reference/functional/ranges_less.md]
値を範囲内に収める。
この関数は、v
の値を範囲[low, high]
に収める。
low
の値はhigh
の値より大きくなってはならない
v
の値がlow
より小さければlow
を返すv
の値がhigh
より大きければhigh
を返す- そうでなければ
v
を返す
#include <iostream>
#include <algorithm>
int main()
{
for (int i = 0; i < 10; ++i) {
// iの値を範囲[2, 7]に収める
int result = std::ranges::clamp(i, 2, 7);
std::cout << i << " : " << result << std::endl;
}
}
- std::ranges::clamp[color ff0000]
0 : 2
1 : 2
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 7
9 : 7
- C++20
- Clang: ??
- GCC: 10.1.0
- ICC: ??
- Visual C++: 2019 Update 10