Это будет самый простой способ:
std::count(bool_array, std::end(bool_array), true) >= 3
Единственная проблема - он продолжает считать даже после того, как обнаружил 3. Если это проблема, то я бы использовал метод sharptooth.
примечание
Я решил создать алгоритм в стиле std::all_of/any_of/none_of
для моей личной библиотеки, возможно, вы найдете его полезным:
template<typename InIt, typename P>
bool n_or_more_of(InIt first, InIt last, P p, unsigned n)
{
while (n && first != last)
{
if (p(*first)) --n;
++first;
}
return n == 0;
}
Для вашей цели вы бы использовали это так:
n_or_more_of(bool_array, std::end(bool_array), [](bool b) { return b; }, 3);