是否有一些 std::count_if() 用于在单次扫描中计算多个不同的属性?

Is there some std::count_if() for counting multiple different properties in a single scan?

是否有一些类似 std::count_if 的函数可以在单次扫描中计算多个不同的属性? 例如。它可能需要一个函数对象的元组和 return 一个 ptrdiff_t 的元组。 或者传递的函数可能 return 一个 bool.

的元组

您可以使用accumulate,建议:

#include <array>
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    std::vector<int> v{1,2,3,4,5,6,7,8,9,10};

    // two properties, each returning a bool
    auto constexpr is_even = [](int x){ return x % 2 == 0; };
    auto constexpr is_div_by_3 = [](int x){ return x % 3 == 0; };

    // the function which combines the accumulator with the current value
    auto constexpr lam = [is_even, is_div_by_3](auto a, int x){
        return std::array{a[0] + is_even(x),
                          a[1] + is_div_by_3(x)};
    };

    auto res = std::accumulate(v.begin(), v.end(), std::array{0,0}, lam);
    std::cout << res[0] << ' ' << res[1] << std::endl; // prints 5 3
}