読者です 読者をやめる 読者になる 読者になる

Boost.Algorithm clamp

C++

Boost 1.50.0で、Boost Algorithmライブラリが新たに追加されました。これからいくつか紹介していこうと思います。
今回はclamp()です。


clamp()は、最小値と最大値を設定した上で値を渡すと、その範囲内に値を収めてくれる関数です。
意味的には、min(max(minval, x), maxval)と同じになります。
以下の例では、値が0から10の範囲外だったらその範囲に収める、ということをしています。

#include <iostream>
#include <boost/algorithm/clamp.hpp>

int main()
{
    using boost::algorithm::clamp;

    int x = 11;
    x = clamp(x, 0, 10);

    int y = -1;
    y = clamp(y, 0, 10);

    std::cout << x << std::endl;
    std::cout << y << std::endl;
}
10
0

また、clamp()による値の変換処理を、値のRangeに対して行うclamp_range()関数もあります。
この関数は、OutputIteratorで変換後のRangeを返します。

#include <iostream>
#include <vector>
#include <boost/algorithm/clamp.hpp>

int main()
{
    std::vector<int> v = {-1, 2, 5, 8, 11};

    // Rangeの値を0から10の範囲に収める
    boost::algorithm::clamp_range(v, v.begin(), 0, 10);

    for (int x : v) {
        std::cout << x << std::endl;
    }
}
0
2
5
8
10


参照:
clamp - Boost Algorithm Library
clamp関数の書き方