Iterators
Collaboration diagram for Iterators:

## Modules

| Iterator Tags

## Classes

struct | std::__iterator_traits< _Iterator, typename >
class | std::back_insert_iterator< _Container >
class | std::front_insert_iterator< _Container >
struct | std::input_iterator_tag
class | std::insert_iterator< _Container >
class | std::istream_iterator< _Tp, _CharT, _Traits, _Dist >
class | std::istreambuf_iterator< _CharT, _Traits >
struct | std::iterator< _Category, _Tp, _Distance, _Pointer, _Reference >
struct | std::iterator_traits< _Tp * >
struct | std::iterator_traits< const _Tp * >
class | std::move_iterator< _Iterator >
class | std::ostream_iterator< _Tp, _CharT, _Traits >
class | std::ostreambuf_iterator< _CharT, _Traits >
class | std::reverse_iterator< _Iterator >

## Macros

#define | __cpp_lib_make_reverse_iterator

## 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 >
constexpr iterator_traits< _Iter >::iterator_category | std::__iterator_category (const _Iter &)
template<typename _Iterator , typename _ReturnType = typename conditional<__move_if_noexcept_cond <typename iterator_traits<_Iterator>::value_type>::value, _Iterator, move_iterator<_Iterator>>::type>
_GLIBCXX17_CONSTEXPR _ReturnType | std::__make_move_if_noexcept_iterator (_Iterator __i)
template<typename _Tp , typename _ReturnType = typename conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp*, move_iterator<_Tp*>>::type>
_GLIBCXX17_CONSTEXPR _ReturnType | std::__make_move_if_noexcept_iterator (_Tp *__i)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR reverse_iterator< _Iterator > | std::__make_reverse_iterator (_Iterator __i)
template<typename _Iterator >
auto | std::__miter_base (reverse_iterator< _Iterator > __it) -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
template<typename _Iterator >
auto | std::__niter_base (reverse_iterator< _Iterator > __it) -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
template<typename _CharT , typename _Distance >
__gnu_cxx::__enable_if< __is_char< _CharT >::__value, void >::__type | std::advance (istreambuf_iterator< _CharT > &__i, _Distance __n)
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 >
insert_iterator< _Container > | std::inserter (_Container &__x, typename _Container::iterator __i)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR move_iterator< _Iterator > | std::make_move_iterator (_Iterator __i)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR reverse_iterator< _Iterator > | std::make_reverse_iterator (_Iterator __i)
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 _CharT , typename _Traits >
bool | std::operator!= (const istreambuf_iterator< _CharT, _Traits > &__a, const istreambuf_iterator< _CharT, _Traits > &__b)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator!= (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator!= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator!= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator!= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR move_iterator< _Iterator > | std::operator+ (typename move_iterator< _Iterator >::difference_type __n, const move_iterator< _Iterator > &__x)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR reverse_iterator< _Iterator > | std::operator+ (typename reverse_iterator< _Iterator >::difference_type __n, const reverse_iterator< _Iterator > &__x)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR auto | std::operator- (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y) -> decltype(__x.base() - __y.base())
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR auto | std::operator- (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y) -> decltype(__y.base() - __x.base())
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator< (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator< (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator< (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator< (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator<= (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator<= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator<= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator<= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__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 _CharT , typename _Traits >
bool | std::operator== (const istreambuf_iterator< _CharT, _Traits > &__a, const istreambuf_iterator< _CharT, _Traits > &__b)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator== (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator== (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator== (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator== (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator> (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator> (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator> (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator> (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator>= (const move_iterator< _Iterator > &__x, const move_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator>= (const move_iterator< _IteratorL > &__x, const move_iterator< _IteratorR > &__y)
template<typename _Iterator >
_GLIBCXX17_CONSTEXPR bool | std::operator>= (const reverse_iterator< _Iterator > &__x, const reverse_iterator< _Iterator > &__y)
template<typename _IteratorL , typename _IteratorR >
_GLIBCXX17_CONSTEXPR bool | std::operator>= (const reverse_iterator< _IteratorL > &__x, const reverse_iterator< _IteratorR > &__y)

## Detailed Description

Abstractions for uniform iterating through various underlying types.

## Function Documentation

## __iterator_category()

template<typename _Iter >

constexpr iterator_traits<_Iter>::iterator_category std::__iterator_category | ( | const _Iter & |  | ) |

inline constexpr

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

Definition at line 205 of file stl_iterator_base_types.h.

Referenced by std::vector< _Tp, _Alloc >::vector(), std::advance(), std::distance(), and std::uninitialized_copy_n().

## back_inserter()

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 556 of file bits/stl_iterator.h.

Referenced by std::match_results< _Bi_iter, _Alloc >::format(), and std::regex_replace().

## front_inserter()

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 647 of file bits/stl_iterator.h.

## inserter()

template<typename _Container >

insert_iterator<_Container> std::inserter | ( | _Container & | __x,
|  | typename _Container::iterator | __i
| ) |  |

inline

Parameters

  __x | A container of arbitrary type.
  __i | An iterator into the container.

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 762 of file bits/stl_iterator.h.

## make_reverse_iterator()

template<typename _Iterator >

_GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> std::make_reverse_iterator | ( | _Iterator | __i | ) |

inline

Generator function for reverse_iterator.

Definition at line 442 of file bits/stl_iterator.h.

## operator!=()

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 141 of file stream_iterator.h.

## operator==() [1/2]

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 134 of file stream_iterator.h.

## operator==() [2/2]

template<typename _Iterator >

_GLIBCXX17_CONSTEXPR 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 325 of file bits/stl_iterator.h.

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