std::all_of în C++

Verifică dacă toate (all_of), măcar unul (any_of) sau niciunul (none_of) dintre elemente îndeplinesc o condiție.

Sintaxă
bool all_of(InputIt first, InputIt last, UnaryPred conditie);
bool any_of(InputIt first, InputIt last, UnaryPred conditie);
bool none_of(InputIt first, InputIt last, UnaryPred conditie);

Ce face std::all_of

Cele trei funcții răspund la întrebări de tip da/nu despre un interval: all_of – toate elementele îndeplinesc condiția? any_of – există măcar unul? none_of – nu există niciunul?

Se opresc imediat ce răspunsul este sigur. Pe un interval gol, all_of și none_of returnează true, iar any_of returnează false.

Parametri

Parametru Descriere
first, last Intervalul verificat.
conditie Funcție care primește un element și returnează bool.

Ce returnează

true sau false.

Exemple

Exemplul 1: Validarea unui cod PIN

#include <algorithm>
#include <cctype>
#include <print>
#include <string>

int main() {
    std::string pin = "4821";
    auto e_cifra = [](unsigned char c) { return std::isdigit(c) != 0; };

    bool valid = pin.size() == 4 && std::all_of(pin.begin(), pin.end(), e_cifra);
    std::println("PIN valid: {}", valid);
}

Rezultat

PIN valid: true

Exemplul 2: Toate trei pe aceleași date

#include <algorithm>
#include <print>
#include <vector>

int main() {
    std::vector<int> stocuri{12, 0, 7, 3};
    auto epuizat = [](int s) { return s == 0; };

    std::println("Toate epuizate: {}", std::ranges::all_of(stocuri, epuizat));
    std::println("Măcar unul epuizat: {}", std::ranges::any_of(stocuri, epuizat));
    std::println("Niciunul epuizat: {}", std::ranges::none_of(stocuri, epuizat));
}

Rezultat

Toate epuizate: false
Măcar unul epuizat: true
Niciunul epuizat: false

Exemplul 3: Interval gol

Pe un vector gol, „toate” este adevărat, iar „măcar unul” este fals.

#include <algorithm>
#include <print>
#include <vector>

int main() {
    std::vector<int> gol;
    auto pozitiv = [](int x) { return x > 0; };

    std::println("{} {} {}", std::ranges::all_of(gol, pozitiv), std::ranges::any_of(gol, pozitiv),
                 std::ranges::none_of(gol, pozitiv));
}

Rezultat

true false true

Greșeli frecvente

  • Uiți că all_of pe un vector gol returnează true. Dacă un vector gol trebuie respins, verifică separat empty().

Comenzi înrudite

  • std::find_if: Găsește primul element care îndeplinește o condiție (find_if) sau primul care nu o îndeplinește (find_if_not).
  • std::count: Numără de câte ori apare o valoare (count) sau câte elemente îndeplinesc o condiție (count_if).
  • std::equal: Verifică dacă două intervale conțin aceleași elemente, în aceeași ordine.