template < class Derived , class Base , class Value = use_default , class CategoryOrTraversal = use_default , class Reference = use_default , class Difference = use_default > class iterator_adaptor : public iterator_facade<Derived, V', C', R', D'> // see details { friend class iterator_core_access; public: iterator_adaptor(); explicit iterator_adaptor(Base iter); Base const& base() const; protected: typedef iterator_adaptor iterator_adaptor_; Base const& base_reference() const; Base& base_reference(); private: // Core iterator interface for iterator_facade. typename iterator_adaptor::reference dereference() const; template < class OtherDerived, class OtherIterator, class V, class C, class R, class D > bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const; void advance(typename iterator_adaptor::difference_type n); void increment(); void decrement(); template < class OtherDerived, class OtherIterator, class V, class C, class R, class D > typename iterator_adaptor::difference_type distance_to( iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const; private: Base m_iterator; // exposition only };
static_cast<Derived*>(iterator_adaptor*) shall be well-formed. The Base argument shall be Assignable and Copy Constructible.
The V', C', R', and D' parameters of the iterator_facade used as a base class in the summary of iterator_adaptor above are defined as follows:
V' = if (Value is use_default) return iterator_traits<Base>::value_type else return Value C' = if (CategoryOrTraversal is use_default) return iterator_traversal<Base>::type else return CategoryOrTraversal R' = if (Reference is use_default) if (Value is use_default) return iterator_traits<Base>::reference else return Value& else return Reference D' = if (Difference is use_default) return iterator_traits<Base>::difference_type else return Difference
iterator_adaptor();
Requires: | The Base type must be Default Constructible. |
---|---|
Returns: | An instance of iterator_adaptor with m_iterator default constructed. |
explicit iterator_adaptor(Base iter);
Returns: | An instance of iterator_adaptor with m_iterator copy constructed from iter. |
---|
Base const& base() const;
Returns: | m_iterator |
---|
Base const& base_reference() const;
Returns: | A const reference to m_iterator. |
---|
Base& base_reference();
Returns: | A non-const reference to m_iterator. |
---|
typename iterator_adaptor::reference dereference() const;
Returns: | *m_iterator |
---|
template < class OtherDerived, class OtherIterator, class V, class C, class R, class D > bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
Returns: | m_iterator == x.base() |
---|
void advance(typename iterator_adaptor::difference_type n);
Effects: | m_iterator += n; |
---|
void increment();
Effects: | ++m_iterator; |
---|
void decrement();
Effects: | --m_iterator; |
---|
template < class OtherDerived, class OtherIterator, class V, class C, class R, class D > typename iterator_adaptor::difference_type distance_to( iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
Returns: | y.base() - m_iterator |
---|