std::vector<int> arr{1, -1, 1, 1, 1, 4, -1, 4, 4, 4, -1, 7, 8, -1};
auto begin = boost::make_filter_iterator<is_positive_number>(arr.begin(), arr.end());
auto end = boost::make_filter_iterator<is_positive_number>(arr.end(), arr.end());
auto lower = std::lower_bound(arr.begin(), arr.end(), i, [](const auto& val1, const auto& val2) {
return val1 < val2;
});
std::vector<int>::iterator iter = ??????(lower);
Наверное в std::lower_bound надо было передавать begin и end, а то они не используются. А получить исходный итератор можно через lower.base().
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости