Существует ли какая-либо стандартная реализация (имеется в виду stdlib или boost) итератора, который обертывает другой итератор и дает только каждый n-й его элемент?
Сначала я подумал, что это возможно с подходящим предикатом и boost::filter_iterator, но предикат получает только значение, а не базовый итератор, поэтому он не может определить расстояние до начала.
Изменить
Чтобы дать дополнительную информацию: итератор должен быть совместим с такими функциями, как std::transform
или std::copy
. Поэтому его следует использовать как итераторы stdlib.
Похожие вопросы:
C++/STL: std::transform с заданным шагом?
Шаг неединичного итератора с неслучайным доступ к итераторам
stride
как слово, которое искал. 04.10.2012strided_iterator
/make_strided_iterator
изboost::range_detail
, но я предполагаю, что нет никакой гарантии, что они останутся, если они находятся в пространстве имен деталей. 04.10.2012std::list
,std::vector
и т. д.) и пару итераторов (std::pair<iterator_type, some_iterator>
). Таким образом, я действительно не понимаю, как вы могли бы не использовать диапазоны Boost (если у вас есть два итератора, обозначающие начало и конец, то вы можете сделать из него диапазон Boost, просто поставив их в пару). 04.10.2012begin
иend
для получения базовых итераторов. 04.10.2012strided
— это однопроходный диапазон, а это означает, что вы не сможете использовать его со всеми алгоритмами. 04.10.2012boost
определяется с помощью помощь от оператора разрешения области видимости:boost::pair
,boost::reference_wrapper
и т. д. 04.10.2012