std::count în C++

Numără de câte ori apare o valoare (count) sau câte elemente îndeplinesc o condiție (count_if).

Sintaxă
difference_type count(InputIt first, InputIt last, const T& valoare);
difference_type count_if(InputIt first, InputIt last, UnaryPred conditie);

Ce face std::count

std::count parcurge intervalul și numără elementele egale cu valoarea dată. std::count_if numără elementele pentru care funcția primită returnează true.

Rezultatul are tipul difference_type (un întreg cu semn, de obicei long), nu size_t.

Parametri

Parametru Descriere
first, last Intervalul.
valoare Pentru count: valoarea numărată.
conditie Pentru count_if: funcție care returnează bool.

Ce returnează

Numărul de elemente găsite.

Exemple

Exemplul 1: De câte ori apare o literă

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

int main() {
    std::string text = "banana";
    std::println("Litera a apare de {} ori", std::count(text.begin(), text.end(), 'a'));
}

Rezultat

Litera a apare de 3 ori

Exemplul 2: Câți elevi au trecut

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

int main() {
    std::vector<double> note{9.5, 4.0, 7.25, 3.5, 10.0, 6.0};

    auto promovati = std::count_if(note.begin(), note.end(), [](double n) { return n >= 5; });
    auto cu_zece = std::ranges::count(note, 10.0);

    std::println("Promovați: {} din {}", promovati, note.size());
    std::println("Note de 10: {}", cu_zece);
}

Rezultat

Promovați: 4 din 6
Note de 10: 1

Greșeli frecvente

  • Compari rezultatul cu un size_t (de exemplu v.size()) și compilatorul avertizează pentru comparație între semn și fără semn. Convertește explicit unul dintre ele.

Comenzi înrudite

  • std::find: Caută prima apariție a unei valori într-un interval și returnează un iterator către ea.
  • 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::all_of: Verifică dacă toate (all_of), măcar unul (any_of) sau niciunul (none_of) dintre elemente îndeplinesc o condiție.
  • std::accumulate: Adună toate elementele unui interval pornind de la o valoare inițială (sau le combină cu o operație dată).