Похоже на работу для std::transform
.
Конечно, есть цикл, но это деталь реализации transform
.
пример:
#include <vector>
#include <algorithm>
template<typename Obj, typename IsTrue>
std::vector<bool> truth(std::vector<Obj> const& v, IsTrue&& truth_func)
{
auto result = std::vector<bool>(v.size());
std::transform(std::begin(v), std::end(v),
std::begin(result),
std::forward<IsTrue>(truth_func));
return result;
}
int main()
{
std::vector<int> v { 1, 2, 3, 4, 5 };
auto is_even = [](auto&& x)
{
return (x % 2) == 0;
};
auto vb = truth(v, is_even);
}