Есть ли способ получить n-й элемент диапазона, используя Boost.Range?(Я не говорю об алгоритме nth_element
, который возвращает элемент, который был бы в n-й позиции, если бы диапазон был отсортирован. Я просто хочу, чтобы n-й элемент соответствовал текущему порядку элементовв диапазоне).
Я ожидал бы, что эта функция будет работать как в диапазонах прямого, так и произвольного доступа (линейное время в случае диапазонов прямого диапазона и постоянное время в случае диапазонов произвольного доступа),и выдать исключение (возможно, std::out_of_range
), если диапазон содержит менее n
элементов.
Я знаю, что это можно сделать, std::advance
-ing итератор begin()
диапазона * n
, но я ищу решение на основе диапазона, которое не опускается до уровня итераторов.
EDIT : На самом деле этого нельзя сделать с помощью std::advance
, посколькуstd::advance
не проверяет, выходите ли вы за пределы диапазона.