Найдите первое истинное значение, возвращаемое некоторым предикатом в диапазонеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Найдите первое истинное значение, возвращаемое некоторым предикатом в диапазоне

Сообщение Anonymous »

С вектором v; и некоторым логическим значением f(T);

Код: Выделить всё

std::any_of(v.begin(), v.end(), f);
сообщает нам, удовлетворяет ли какой-либо элемент f

Код: Выделить всё

std::find_if(v.begin(), v.end(), f);
сообщите нам, какой элемент удовлетворяет f
Но допустим, у меня есть std::optional g(T)
Я хотел бы получить первый результат предиката g, примененного к [v.begin(), v.end()), где результат has_value() (он же правда).
Я примерно написал это так:

Код: Выделить всё

template 
auto first_true(Iterator b, Iterator e, Callable && op) {
static_assert(static_cast(ResultT{}) == false,
"The default-constructed value returned by Callable must be convertible to boolean and evaluate to 'false'");

ResultT res{};
for (b; b != e; b++) {
res = op(*b);
if (res) return res;
}
return res;
};
Но предпочли бы использовать функцию std или boost.
Существует ли стандартная библиотечная функция или функция boost, которая возвращает первое «истинное» значение, возвращенное из предиката?

Подробнее здесь: https://stackoverflow.com/questions/723 ... er-a-range
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»