【C++17】std::clamp で値を特定の範囲内に収める(クランプする)方法

目次

はじめに

プログラミングでは、計算結果やユーザーの入力値が、意図した範囲(例えば0〜100)に収まっていることを保証したい、という場面がよくあります。従来は、if文を使って「もし最小値より小さければ最小値に、もし最大値より大きければ最大値にする」というコードを自分で書く必要がありました。

C++17では、このための標準関数 std::clamp<algorithm> ヘッダーに追加されました。clamp を使えば、この「値を範囲内に収める(クランプする)」処理を、一行で、意図が明確な形で記述できます。


【前提】C++17とは?

C++17(シーピープラスいちなな)は、2017年に正式化されたC++言語の規格です。std::clamp はこのC++17で追加された機能のため、利用するにはC++17に対応したコンパイラが必要です。


clamp を使ったサンプルコード

このコードは、いくつかの入力値に対して、10 から 20 までの範囲で clamp を適用し、その結果を出力します。

完成コード

#include <iostream>
#include <algorithm> // std::clamp

using namespace std;

int main() {
    const int min_val = 10;
    const int max_val = 20;

    int input1 = 5;    // 範囲より小さい
    int input2 = 15;   // 範囲内
    int input3 = 25;   // 範囲より大きい

    // clamp(値, 最小値, 最大値)
    int result1 = clamp(input1, min_val, max_val);
    int result2 = clamp(input2, min_val, max_val);
    int result3 = clamp(input3, min_val, max_val);

    cout << input1 << " -> clamp(x, 10, 20) -> " << result1 << endl;
    cout << input2 << " -> clamp(x, 10, 20) -> " << result2 << endl;
    cout << input3 << " -> clamp(x, 10, 20) -> " << result3 << endl;
    
    return 0;
}

実行結果

5 -> clamp(x, 10, 20) -> 10
15 -> clamp(x, 10, 20) -> 15
25 -> clamp(x, 10, 20) -> 20

コードの解説

clamp(value, low, high)

  • 機能: 第1引数 value の値を、第2引数 low と第3引数 high で定義される閉区間 [low, high] の範囲内に収めます。
  • 動作:
    • もし valuelow より小さい場合、low を返します。
    • もし valuehigh より大きい場合、high を返します。
    • もし valuelowhigh の間にある場合、value そのものを返します。
  • 注意点: lowhigh より大きい場合の動作は未定義です。必ず low <= high となるように値を指定する必要があります。

まとめ

今回は、C++17の std::clamp を使って、値を特定の範囲内に収める方法を解説しました。

  • <algorithm> ヘッダーをインクルードする。
  • clamp(値, 最小値, 最大値) の形で呼び出す。

if文を複数書くよりも、clamp を使った方がコードが簡潔になり、「値を特定の範囲に制限したい」という意図が明確になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次