@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



See also

TODO

This page was last modified on 2024-03-19