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



是否有任何迭代器的标准实现(意味着stdlib或boost)包装另一个迭代器并仅提供其每个n个元素?

我最初认为这可以通过合适的谓词和 boost::filter_iterator 来实现,但谓词只获得值而不是基本迭代器,因此它无法分辨到开始的距离。

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

类似问题:
C++/STL: std::用给定的步伐转换?
使用非随机访问迭代器实现非单元迭代器步幅

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

您可以将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;
 };

最新更新