@specsoftdev live:.cid.8e17e9b93cabb607 specsoftdev@gmail.com
std::clamp
Актуально для C++23.

#include <algorithm>
Актуально на 2024-03-19.



Define overload #1
template<class T> constexpr const T&
clamp(const T& v, const T& lo, const T& hi);

Ограничивает значение "v" в пределах между "lo" и "hi".
Возвращает значение в диапазоне "lo" и "hi".
Example, possible implementation
Define overload #2
template<class T, class Compare> constexpr const T&
clamp(const T& v, const T& lo, const T& hi, Compare comp);

Ограничивает значение "v" в пределах между "lo" и "hi".
Возвращает значение в диапазоне "lo" и "hi".
Значения сравниваются с помощью бинарного предиката "comp".
Example, possible implementation


Examples


Example 1:
#include <iostream>
#include <algorithm>
#include <vector>

static void
clamp_range(auto begin, auto end, auto out, auto lo, auto hi)
{
    for (auto it=begin; it < end; ++it) {
        *out = std::clamp(*it, lo, hi);
        ++out;
    }
}

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
    clamp_range(std::begin(v), std::end(v), std::begin(v), 3, 7);
    for (auto it : v) {
        std::cout << it << '\n';
    }
    return 0;
}

3
3
3
4
5
6
7
7
7



Changelog

C++26
TODO
C++23
TODO
C++20
TODO
C++17
TODO
C++14
TODO
C++11
TODO


See also

TODO

This page was last modified on 2024-03-19