diff --git a/algorithm.h b/algorithm.h index 0037651..29e0ae7 100644 --- a/algorithm.h +++ b/algorithm.h @@ -46,9 +46,9 @@ namespace firefly::std { } template - std::size_t count_if(InputIt first, const InputIt last, + size_t count_if(InputIt first, const InputIt last, UnaryPredicate func) { - std::size_t count = 0; + size_t count = 0; for (; first != last; first++) { if (func(*first)) @@ -58,9 +58,9 @@ namespace firefly::std { return count; } - template std::size_t count(InputIt first, const InputIt last, + template size_t count(InputIt first, const InputIt last, const T& lval) { - std::size_t count = 0; + size_t count = 0; for (; first != last; first++) { if (*first == lval) @@ -70,6 +70,28 @@ namespace firefly::std { return count; } + template size_t + accumulate(InputIt begin, InputIt end) { + size_t sum = 0; + + while (begin != end) { + sum += *begin; + } + + return sum; + } + + template size_t + accumulate(InputIt begin, InputIt end, Op op) { + size_t sum = 0; + + while (begin != end) { + sum = op(sum, *begin); + } + + return sum; + } + /* template void sort(RandomIt first, RandomIt last) {