clampC++17

[機能]

  値 v を指定した範囲 [low, high] 内に収めます.2 引数の比較関数を指定することも可能です(下の表現,sort 参照).

[形式]
#include <algorithm>

template <class T>
    constexpr const T& clamp(const T& v, const T& low, const T& high);
template <class T, class Compare>
    constexpr const T& clamp(const T& v, const T& low, const T& high,
                             Compare comp);		

[使用例]

  1. max, min, minmax, max_element, min_element, minmax_element, clamp の使用方法です.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    					// max, min, minmax
    	printf("max, min, minmax\n");
    	int kmax1 = max(5, 3);
    	int kmax2 = max({5, 8, 1, 3});
    	int kmin1 = min(5, 3);
    	int kmin2 = min({5, 8, 1, 3});
    	printf("  最大値 %d %d 最小値 %d %d\n", kmax1, kmax2, kmin1, kmin2);
    	pair<int, int> p1 = minmax(5, 3);
    	pair<int, int> p2 = minmax({5, 8, 1, 3});
    	printf("  最大値,最小値 %d %d 最大値,最小値 %d %d\n",
    	       p1.second, p1.first, p2.second, p2.first);
    					// max_element, min_element, minmax_element
    	printf("max_element, min_element, minmax_element\n");
    	vector<int> v {5, 8, 1, 3};
    	vector<int>::iterator imax = max_element(v.begin(), v.end());
    	vector<int>::iterator imin = min_element(v.begin(), v.end());
    	printf("  最大値 %d 最小値 %d\n", *imax, *imin);
    	pair<vector<int>::iterator, vector<int>::iterator> ip = minmax_element(v.begin(), v.end());
    	printf("  最大値 %d 最小値 %d\n", *(ip.second), *(ip.first));
    					// clamp
    	printf("clamp\n");
    	for (int i1 = 0; i1 < 10; i1++) {
    		int x = clamp(i1, 3, 7);
    		printf("  %d", x);
    	}
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
    max, min, minmax
      最大値 5 8 最小値 3 1
      最大値,最小値 5 3 最大値,最小値 8 1
    max_element, min_element, minmax_element
      最大値 8 最小値 1
      最大値 8 最小値 1
    clamp
      3  3  3  3  4  5  6  7  7  7			
[参照]

sortmaxminmaxmax_elementmin_elementminmax_elementmin

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引