# Iterators

Collaboration diagram for Iterators:

## Classes

- class std::back_insert_iterator< _Container >
    Turns assignment into insertion. More...
- class std::front_insert_iterator< _Container >
    Turns assignment into insertion. More...
- struct std::input_iterator_tag
    Marking input iterators. More...
- class std::insert_iterator< _Container >
    Turns assignment into insertion. More...
- class std::istream_iterator< _Tp, _CharT, _Traits, _Dist >
    Provides input iterator semantics for streams. More...
- class std::istreambuf_iterator< _CharT, _Traits >
    Provides input iterator semantics for streambufs. More...
- struct std::iterator< _Category, _Tp, _Distance, _Pointer, _Reference >
    Common iterator class. More...
- struct std::iterator_traits< _Iterator >
    Traits class for iterators. More...
- struct std::iterator_traits< _Tp * >
    Partial specialization for pointer types. More...
- struct std::iterator_traits< const _Tp * >
    Partial specialization for const pointer types. More...
- class std::move_iterator< _Iterator >
- class std::ostream_iterator< _Tp, _CharT, _Traits >
    Provides output iterator semantics for streams. More...
- class std::ostreambuf_iterator< _CharT, _Traits >
    Provides output iterator semantics for streambufs. More...
- class std::reverse_iterator< _Iterator >

## Modules

- Iterator Tags

## Functions

- template<bool _IsMove, typename _CharT > __gnu_cxx::__enable_if
  < __is_char< _CharT >::__value,
  ostreambuf_iterator< _CharT >
  >::__type std::__copy_move_a2 (_CharT *__first, _CharT *__last, ostreambuf_iterator< _CharT > __result)
- template<bool _IsMove, typename _CharT > __gnu_cxx::__enable_if
  < __is_char< _CharT >::__value,
  ostreambuf_iterator< _CharT >
  >::__type std::__copy_move_a2 (const _CharT *__first, const _CharT *__last, ostreambuf_iterator< _CharT > __result)
- template<bool _IsMove, typename _CharT > __gnu_cxx::__enable_if
  < __is_char< _CharT >::__value,
  _CharT * >::__type std::__copy_move_a2 (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, _CharT *__result)
- template<typename _Iter > iterator_traits< _Iter >
  ::iterator_category std::__iterator_category (const _Iter &)
- template<typename _Container > back_insert_iterator< _Container > std::back_inserter (_Container &__x)
- template<typename _CharT > __gnu_cxx::__enable_if
  < __is_char< _CharT >::__value,
  ostreambuf_iterator< _CharT >
  >::__type std::copy (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, ostreambuf_iterator< _CharT > __result)
- template<typename _CharT > __gnu_cxx::__enable_if
  < __is_char< _CharT >::__value,
  istreambuf_iterator< _CharT >
  >::__type std::find (istreambuf_iterator< _CharT > __first, istreambuf_iterator< _CharT > __last, const _CharT &__val)
- template<typename _Container > front_insert_iterator< _Container > std::front_inserter (_Container &__x)
- template<typename _Container , typename _Iterator > insert_iterator< _Container > std::inserter (_Container &__x, _Iterator __i)
- template<typename _Iterator > move_iterator< _Iterator > std::make_move_iterator (const _Iterator &__i)
- template<typename _IteratorL , typename _IteratorR > bool std::operator!= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _CharT , typename _Traits > bool std::operator!= (const istreambuf_iterator< _CharT, _Traits > &__a, const istreambuf_iterator< _CharT, _Traits > &__b)
- template<typename _Iterator > bool std::operator!= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator!= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
- template<class _Tp , class _CharT , class _Traits , class _Dist > bool std::operator!= (const istream_iterator< _Tp, _CharT, _Traits, _Dist > &__x, const istream_iterator< _Tp, _CharT, _Traits, _Dist > &__y)
- template<typename _Iterator > reverse_iterator< _Iterator > std::operator+ (typename reverse_iterator< _Iterator >::difference_type __n, const reverse_iterator< _Iterator > &__x)
- template<typename _Iterator > move_iterator< _Iterator > std::operator+ (typename move_iterator< _Iterator >::difference_type __n, const move_iterator< _Iterator > &__x)
- template<typename _IteratorL , typename _IteratorR > auto std::operator- (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)-> decltype(__x.base()-__y.base())
- template<typename _Iterator > reverse_iterator< _Iterator >
  ::difference_type std::operator- (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _IteratorL , typename _IteratorR > auto std::operator- (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)-> decltype(__y.base()-__x.base())
- template<typename _IteratorL , typename _IteratorR > bool std::operator< (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator< (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _Iterator > bool std::operator< (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _Iterator > bool std::operator<= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator<= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator<= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _CharT , typename _Traits > bool std::operator== (const istreambuf_iterator< _CharT, _Traits > &__a, const istreambuf_iterator< _CharT, _Traits > &__b)
- template<typename _IteratorL , typename _IteratorR > bool std::operator== (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _Iterator > bool std::operator== (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _Tp , typename _CharT , typename _Traits , typename _Dist > bool std::operator== (const istream_iterator< _Tp, _CharT, _Traits, _Dist > &__x, const istream_iterator< _Tp, _CharT, _Traits, _Dist > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator== (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator> (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator> (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _Iterator > bool std::operator> (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator>= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
- template<typename _Iterator > bool std::operator>= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
- template<typename _IteratorL , typename _IteratorR > bool std::operator>= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)

## Detailed Description

Abstractions for uniform iterating through various underlying types.

## Function Documentation

template<typename _Iter >

iterator_traits<_Iter>::iterator_category std::__iterator_category | ( | const _Iter & |  | ) | `[inline]`

This function is not a part of the C++ standard but is syntactic sugar for internal library use only.

Definition at line 174 of file stl_iterator_base_types.h.

Referenced by std::advance(), std::copy_n(), __gnu_cxx::copy_n(), std::distance(), __gnu_cxx::distance(), std::find(), std::find_end(), std::find_if(), std::find_if_not(), std::partition(), std::reverse(), std::search_n(), std::uninitialized_copy_n(), __gnu_cxx::uninitialized_copy_n(), and std::unique_copy().

template<typename _Container >

back_insert_iterator<_Container> std::back_inserter | ( | _Container & | __x | ) | `[inline]`

Parameters:

  | x | A container of arbitrary type.

Returns:
  An instance of back_insert_iterator working on `x`.

This wrapper function helps in creating back_insert_iterator instances. Typing the name of the iterator requires knowing the precise full type of the container, which can be tedious and impedes generic programming. Using this function lets you take advantage of automatic template parameter deduction, making the compiler match the correct types for you.

Definition at line 471 of file stl_iterator.h.

template<typename _Container >

front_insert_iterator<_Container> std::front_inserter | ( | _Container & | __x | ) | `[inline]`

Parameters:

  | x | A container of arbitrary type.

Returns:
  An instance of front_insert_iterator working on `x`.

This wrapper function helps in creating front_insert_iterator instances. Typing the name of the iterator requires knowing the precise full type of the container, which can be tedious and impedes generic programming. Using this function lets you take advantage of automatic template parameter deduction, making the compiler match the correct types for you.

Definition at line 561 of file stl_iterator.h.

template<typename _Container , typename _Iterator >

insert_iterator<_Container> std::inserter | ( | _Container & | __x,
|  | _Iterator | __i |
| ) |  |  | `[inline]`

Parameters:

  | x | A container of arbitrary type.

Returns:
  An instance of insert_iterator working on `x`.

This wrapper function helps in creating insert_iterator instances. Typing the name of the iterator requires knowing the precise full type of the container, which can be tedious and impedes generic programming. Using this function lets you take advantage of automatic template parameter deduction, making the compiler match the correct types for you.

Definition at line 675 of file stl_iterator.h.

template<class _Tp , class _CharT , class _Traits , class _Dist >

bool std::operator!= | ( | const istream_iterator< _Tp, _CharT, _Traits, _Dist > & | __x,
|  | const istream_iterator< _Tp, _CharT, _Traits, _Dist > & | __y |
| ) |  |  | `[inline]`

Return false if x and y are both end or not end, or x and y are the same.

Definition at line 135 of file stream_iterator.h.

template<typename _Iterator >

bool std::operator== | ( | const reverse_iterator< _Iterator > & | __x,
|  | const reverse_iterator< _Iterator > & | __y |
| ) |  |  | `[inline]`

Parameters:

  | x | A reverse_iterator.
  | y | A reverse_iterator.

Returns:
  A simple bool.

Reverse iterators forward many operations to their underlying base() iterators. Others are implemented in terms of one another.

Definition at line 283 of file stl_iterator.h.

References std::reverse_iterator< _Iterator >::base().

template<typename _Tp , typename _CharT , typename _Traits , typename _Dist >

bool std::operator== | ( | const istream_iterator< _Tp, _CharT, _Traits, _Dist > & | __x,
|  | const istream_iterator< _Tp, _CharT, _Traits, _Dist > & | __y |
| ) |  |  | `[inline]`

Return true if x and y are both end or not end, or x and y are the same.

Definition at line 128 of file stream_iterator.h.