Ce face std::clamp
std::clamp(v, lo, hi) returnează lo dacă v < lo, hi dacă v > hi, altfel chiar v. Înlocuiește combinația std::max(lo, std::min(v, hi)).
Este folosit pentru volum, procente, coordonate pe ecran sau note care trebuie să rămână între 1 și 10. Condiție: lo nu are voie să fie mai mare decât hi.
Parametri
| Parametru | Descriere |
|---|---|
valoare |
Valoarea de limitat. |
minim, maxim |
Capetele intervalului permis (minim <= maxim). |
Ce returnează
Valoarea limitată.
Exemple
Exemplul 1: Volum între 0 și 100
#include <algorithm>
#include <print>
int main() {
for (int volum : {-20, 45, 130}) {
std::println("{} -> {}", volum, std::clamp(volum, 0, 100));
}
}
Rezultat
-20 -> 0
45 -> 45
130 -> 100
Exemplul 2: Nota finală între 1 și 10
#include <algorithm>
#include <print>
int main() {
double nota = 9.4;
double bonus = 1.5;
double finala = std::clamp(nota + bonus, 1.0, 10.0);
std::println("Nota finală: {:.2f}", finala);
}
Rezultat
Nota finală: 10.00
Greșeli frecvente
- Inversezi capetele (
std::clamp(x, 100, 0)): comportament nedefinit. - Amesteci tipuri, ca
std::clamp(x, 0, 1)cuxde tipdouble: nu compilează. Scrie0.0și1.0.
Comenzi înrudite
std::min: Returnează cea mai mică dintre două valori sau dintr-o listă de valori scrisă între acolade.std::max: Returnează cea mai mare dintre două valori sau dintr-o listă de valori scrisă între acolade.std::lerp: Interpolare liniară: valoarea aflată la fracțiunea t pe drumul dintre a și b (a + t·(b − a)).