Boost.Algorithm clamp
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関数の書き方