учитывая контейнер как std::vector<T>
, где T
является универсальным типом для числовых величин (например, int
, float
и т. д.), я хотел бы иметь предикат, который принимает в качестве аргументов:
Я хотел бы иметь в качестве вывода:
true
)В стандартной библиотеке C ++, похоже, нет даже понятия range
и это странно для меня просто потому, что есть много интересных алгоритмов и типов, но ничего, что могло бы служить моим целям в этом случае.
Прежде чем продолжить свой собственный путь, я спрашиваю, есть ли что-то подобное с точки зрения типов и алгоритмов в библиотеке C ++?
Вместо того, чтобы оценивать состояние каждого элемента в коллекции, я думаю, что я бы начал с использования std::minmax_element
найти самые маленькие и самые большие элементы в коллекции.
Оттуда просто проверить result.first < minimum
и / или result.second > maximum
,
Работа с допуском — это в основном вопрос повторения теста с расширенным диапазоном.
Что касается того, может ли это быть лучше, чем std::find_if
или же std::all_of
, это будет зависеть как от количества предметов, которые вы ожидаете в коллекции, так и от вероятности нахождения значения вне диапазона, которое позволило бы досрочно выйти. Я думаю, что вам понадобятся некоторые знания о данных, чтобы дать осмысленный прогноз об этом.
Других решений пока нет …