好的,现在你的问题更清楚了:-)
看一下 boost::iterator_facade 和 boost::iterator 适配器。他们实现了完整的迭代器接口和你的cycle_iterator
仅用于实现一些方法,如increment()、decrement():
template<class IteratorBase>
class cycle_iterator
: public boost::iterator_adaptor<
cycle_iterator, // the derived class overriding iterator behavior
IteratorBase, // the base class providing default behavior
boost::use_default, // iterator value type, will be IteratorBase::value_type
std::forward_iterator_tag, // iterator category
boost::use_default // iterator reference type
>
{
private:
IteratorBase m_itBegin;
IteratorBase m_itEnd;
public:
cycle_iterator( IteratorBase itBegin, IteratorBase itEnd )
: iterator_adaptor_(itBegin), m_itBegin(itBegin), m_itEnd(itEnd)
{}
void increment() {
/* Increment the base reference pointer. */
++base_reference();
/* Check if past-the-end element is reached and bring back the base reference to the beginning. */
if(base_reference() == m_itEnd)
base_reference() = m_itBegin;
}
// implement decrement() and advance() if necessary
};
这可能无法编译,但应该可以帮助您入门。
Edit:
升压::迭代器适配器 http://www.boost.org/doc/libs/1_41_0/libs/iterator/doc/iterator_adaptor.html用几个函数实现了完整的迭代器接口。它提供了默认实现increment()
, decrement()
, advance()
, distance_to()
, equal_to()
and dereference()
使用传递给的基本迭代器iterator_adaptor
基类。
如果您需要的只是一个前向迭代器,则只需increment()
方法必须实现为在到达结束迭代器后回绕。如果您实现循环迭代器可以是双向的decrement()
以类似的方式。如果IteratorBase
本身是一个随机访问迭代器,循环迭代器也可以是随机访问和方法advance
and distance_to
必须使用模运算来实现。