是否有一些 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
}
是否有一些类似 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
}