获取迭代器范围的每个第n个元素

Nob*_*ody 7 c++ boost iterator std

是否有一个迭代器的标准实现(意思是stdlib或boost)包装另一个迭代器并且只给出它的每个第n个元素?

我首先想到的是,使用拟合谓词和boost :: filter_iterator是可能的,但是谓词只获取值而不是基本迭代器,所以它无法告诉起始距离.

编辑
提供更多信息:迭代器应与std::transform或等函数兼容std::copy.所以它应该像stdlib迭代器一样使用.

类似的问题:
C++/STL:std :: transform与给定的步幅?
非单元迭代器使用非随机访问迭代器

Luc*_*ton 9

Boost.Range提供了一个步幅适配器.使用boost::begin/ boost::end将为您提供相关的迭代器.


Zde*_*vic 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;
 };
Run Code Online (Sandbox Code Playgroud)