std::max în C++

Returnează cea mai mare dintre două valori sau dintr-o listă de valori scrisă între acolade.

Sintaxă
const T& max(const T& a, const T& b);
T max(std::initializer_list<T> lista);  // C++11

Ce face std::max

std::max(a, b) returnează valoarea mai mare; dacă sunt egale, returnează prima. Cu acolade primește oricâte valori: std::max({a, b, c}).

Ca la std::min, argumentele trebuie să aibă același tip. Pentru maximul unui container folosește std::max_element sau std::ranges::max(v).

Parametri

Parametru Descriere
a, b Valorile comparate.
lista Lista de valori între acolade.
comp Opțional. Funcția de comparare.

Ce returnează

Cea mai mare valoare.

Exemple

Exemplul 1: Scorul cel mai bun

#include <algorithm>
#include <print>

int main() {
    int record = 87;
    int scor_nou = 92;
    record = std::max(record, scor_nou);
    std::println("Record: {}", record);

    std::println("Maxim: {}", std::max({3.5, 9.25, 7.0}));
}

Rezultat

Record: 92
Maxim: 9.25

Exemplul 2: Nu coborî sub zero

std::max(0, x) este un mod scurt de a înlocui valorile negative cu 0.

#include <algorithm>
#include <print>

int main() {
    int stoc = 5;
    for (int vandute : {3, 4, 2}) {
        stoc = std::max(0, stoc - vandute);
        std::println("Stoc: {}", stoc);
    }
}

Rezultat

Stoc: 2
Stoc: 0
Stoc: 0

Greșeli frecvente

  • Scrii std::max(1, 2.5): tipurile int și double diferă și apelul nu compilează.
  • Cauți maximul unui vector cu std::max(v): varianta clasică nu primește containere. Folosește std::ranges::max(v) sau *std::max_element(...).

Comenzi înrudite

  • std::min: Returnează cea mai mică dintre două valori sau dintr-o listă de valori scrisă între acolade.
  • std::minmax: Returnează dintr-un singur apel o pereche formată din cea mai mică și cea mai mare valoare.
  • std::min_element: Găsește cel mai mic (min_element) sau cel mai mare (max_element) element dintr-un interval și returnează un iterator.
  • std::clamp: Limitează o valoare la un interval: o aduce la minim dacă e prea mică și la maxim dacă e prea mare.