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 |
|---|