Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Front Page / Iterators / Iterator Metafunctions / iterator_category

iterator_category

Synopsis

template<
      typename Iterator
    >
struct iterator_category
{
    typedef typename Iterator::category type;
};

Description

Returns one of the following iterator category tags:

Header

#include <boost/mpl/iterator_category.hpp>
#include <boost/mpl/iterator_tags.hpp>

Parameters

Parameter Requirement Description
Iterator Forward Iterator The iterator to obtain a category for.

Expression semantics

For any Forward Iterators iter:

typedef iterator_category<iter>::type tag;
Return type:

Integral Constant.

Semantics:

tag is forward_iterator_tag if iter is a model of Forward Iterator, bidirectional_iterator_tag if iter is a model of Bidirectional Iterator, or random_access_iterator_tag if iter is a model of Random Access Iterator;

Postcondition:
forward_iterator_tag::value < bidirectional_iterator_tag::value,

bidirectional_iterator_tag::value < random_access_iterator_tag::value.

Complexity

Amortized constant time.

Example

template< typename Tag, typename Iterator >
struct algorithm_impl
{
    // O(n) implementation
};

template< typename Iterator >
struct algorithm_impl<random_access_iterator_tag,Iterator>
{
    // O(1) implementation
};

template< typename Iterator >
struct algorithm
    : algorithm_impl<
          iterator_category<Iterator>::type
        , Iterator
        >
{
};

See also

Iterators, begin / end, advance, distance, next