是否有任何迭代器的标准实现(意味着stdlib或boost)包装另一个迭代器并仅提供其每个n个元素?
我最初认为这可以通过合适的谓词和 boost::filter_iterator 来实现,但谓词只获得值而不是基本迭代器,因此它无法分辨到开始的距离。
编辑
要提供更多信息:迭代器应与 std::transform
或 std::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;
};