Dlaczego std::for_each zwraca funktor/funkcje skoro jest std::count_if

0

Witam.

Jak w temacie.
Dlaczego std::for_each zwraca funktor/funkcje skoro jest std::count_if.
Znalazłem wypowiedzi, że std::for_each zwraca funktor, ponieważ for_each może posłużyć nie tylko do operacji na elementach ale również do zliczania elementów. Wówczas funktor mógłby mieć pole z licznikiem. Ok. Ma to sens. Ale przecież do tego idealnie pasuje std::count_if.

0

Podejrzewam, że na etapie powstawania biblioteki for_each zostało dodane przed count_if, a zwracanie lekkiego funktora nikomu nie przeszkadza, więc zostało. for_each, count_if, accumulate i pewnie kilka innych częściowo wzajemnie zahaczają o możliwe zastosowania.

0
  1. Te funkcje różnią się poziomem interakcji z kontenerem.

count_if < accumulate < for_each < transform

  • count_if: liczy elementy, czyli zwraca k <= n
  • accumulate: zbiera wartości (uniwersalna redukcja), w szczególności może obliczyć b = a(1) * a(2) *... * a(n)
  • for_each: wykonuje redukcję (jak wyżej) lub transformatę
  • przykład transformaty: http://en.cppreference.com/w/cpp/algorithm/for_each
  • transform: wykonuje transformatę i może robić to na nowym kontenerze
  1. Od C++17 będzie dostępna wersja for_each która nic nie zwraca, co jasno pokazuje, że jest to bardziej transformata niż redukcja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1