C++1z 値を範囲内に収めるclamp()関数

値を、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

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。