値を、min <= v <= maxのように範囲内に収める関数として、clamp()
が定義されます。
std::min(std::max(min_value, x), max_value)
のようにするのと同等の効果があります。
引数の順番は、対象の値、最小値、最大値です。戻り値として範囲内に丸められた値が返ります。
// <algorithm> namespace std { template <class T> constexpr const T& clamp(const T& v, const T& lo, const T& hi); template <class T, class Compare> constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); }
例:
#include <iostream> #include <algorithm> int main() { int v = 3; // vの値を[0, 2]の範囲内に収める int result = std::clamp(v, 0, 2); std::cout << result << std::endl; }
出力:
2
参照
- N4536 An algorithm to "clamp" a value between a pair of boundary values
- P0025R0 An algorithm to "clamp" a value between a pair of boundary values (revision 1)
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。