是否有一个迭代器的标准实现(意思是stdlib或boost)包装另一个迭代器并且只给出它的每个第n个元素?
我首先想到的是,使用拟合谓词和boost :: filter_iterator可以实现这一点,但是谓词只获取值而不是基本迭代器,所以它无法告诉起始距离。
修改
提供更多信息:
迭代器应与std::transform
或std::copy
等函数兼容。
所以它应该像stdlib迭代器一样使用。
类似的问题:
C++/STL: std::transform with given stride?
Non-unit iterator stride with non-random access iterators
答案 0 :(得分:9)
Boost.Range提供a stride adaptor。使用boost::begin
/ boost::end
可以获得相关的迭代器。
答案 1 :(得分:5)
您可以将boost::filter_iterator
与谓词一起使用:
template< typename T, int N >
struct EveryNth {
bool operator()(const T&) { return m_count++ % N == 0; }
EveryNth() : m_count(0) {}
private:
int m_count;
};