60 #ifndef _STL_ITERATOR_H
61 #define _STL_ITERATOR_H 1
68 #if __cplusplus > 201402L
69 # define __cpp_lib_array_constexpr 201603
72 namespace std _GLIBCXX_VISIBILITY(default)
74 _GLIBCXX_BEGIN_NAMESPACE_VERSION
100 template<
typename _Iterator>
102 :
public iterator<typename iterator_traits<_Iterator>::iterator_category,
103 typename iterator_traits<_Iterator>::value_type,
104 typename iterator_traits<_Iterator>::difference_type,
105 typename iterator_traits<_Iterator>::pointer,
106 typename iterator_traits<_Iterator>::reference>
111 typedef iterator_traits<_Iterator> __traits_type;
114 typedef _Iterator iterator_type;
115 typedef typename __traits_type::difference_type difference_type;
116 typedef typename __traits_type::pointer pointer;
117 typedef typename __traits_type::reference reference;
132 explicit _GLIBCXX17_CONSTEXPR
140 : current(__x.current) { }
146 template<
typename _Iter>
149 : current(__x.
base()) { }
154 _GLIBCXX17_CONSTEXPR iterator_type
168 _GLIBCXX17_CONSTEXPR reference
171 _Iterator __tmp = current;
182 _GLIBCXX17_CONSTEXPR pointer
285 _GLIBCXX17_CONSTEXPR reference
287 {
return *(*
this + __n); }
300 template<
typename _Iterator>
301 inline _GLIBCXX17_CONSTEXPR
bool
304 {
return __x.
base() == __y.
base(); }
306 template<
typename _Iterator>
307 inline _GLIBCXX17_CONSTEXPR
bool
308 operator<(const reverse_iterator<_Iterator>& __x,
309 const reverse_iterator<_Iterator>& __y)
310 {
return __y.base() < __x.base(); }
312 template<
typename _Iterator>
313 inline _GLIBCXX17_CONSTEXPR
bool
314 operator!=(
const reverse_iterator<_Iterator>& __x,
315 const reverse_iterator<_Iterator>& __y)
316 {
return !(__x == __y); }
318 template<
typename _Iterator>
319 inline _GLIBCXX17_CONSTEXPR
bool
320 operator>(
const reverse_iterator<_Iterator>& __x,
321 const reverse_iterator<_Iterator>& __y)
322 {
return __y < __x; }
324 template<
typename _Iterator>
325 inline _GLIBCXX17_CONSTEXPR
bool
326 operator<=(const reverse_iterator<_Iterator>& __x,
327 const reverse_iterator<_Iterator>& __y)
328 {
return !(__y < __x); }
330 template<
typename _Iterator>
331 inline _GLIBCXX17_CONSTEXPR
bool
332 operator>=(
const reverse_iterator<_Iterator>& __x,
333 const reverse_iterator<_Iterator>& __y)
334 {
return !(__x < __y); }
338 template<
typename _IteratorL,
typename _IteratorR>
339 inline _GLIBCXX17_CONSTEXPR
bool
340 operator==(
const reverse_iterator<_IteratorL>& __x,
341 const reverse_iterator<_IteratorR>& __y)
342 {
return __x.base() == __y.base(); }
344 template<
typename _IteratorL,
typename _IteratorR>
345 inline _GLIBCXX17_CONSTEXPR
bool
346 operator<(const reverse_iterator<_IteratorL>& __x,
347 const reverse_iterator<_IteratorR>& __y)
348 {
return __y.base() < __x.base(); }
350 template<
typename _IteratorL,
typename _IteratorR>
351 inline _GLIBCXX17_CONSTEXPR
bool
352 operator!=(
const reverse_iterator<_IteratorL>& __x,
353 const reverse_iterator<_IteratorR>& __y)
354 {
return !(__x == __y); }
356 template<
typename _IteratorL,
typename _IteratorR>
357 inline _GLIBCXX17_CONSTEXPR
bool
358 operator>(
const reverse_iterator<_IteratorL>& __x,
359 const reverse_iterator<_IteratorR>& __y)
360 {
return __y < __x; }
362 template<
typename _IteratorL,
typename _IteratorR>
363 inline _GLIBCXX17_CONSTEXPR
bool
364 operator<=(const reverse_iterator<_IteratorL>& __x,
365 const reverse_iterator<_IteratorR>& __y)
366 {
return !(__y < __x); }
368 template<
typename _IteratorL,
typename _IteratorR>
369 inline _GLIBCXX17_CONSTEXPR
bool
370 operator>=(
const reverse_iterator<_IteratorL>& __x,
371 const reverse_iterator<_IteratorR>& __y)
372 {
return !(__x < __y); }
375 #if __cplusplus < 201103L
376 template<
typename _Iterator>
377 inline typename reverse_iterator<_Iterator>::difference_type
378 operator-(
const reverse_iterator<_Iterator>& __x,
379 const reverse_iterator<_Iterator>& __y)
380 {
return __y.base() - __x.base(); }
382 template<
typename _IteratorL,
typename _IteratorR>
383 inline typename reverse_iterator<_IteratorL>::difference_type
384 operator-(
const reverse_iterator<_IteratorL>& __x,
385 const reverse_iterator<_IteratorR>& __y)
386 {
return __y.base() - __x.base(); }
390 template<
typename _IteratorL,
typename _IteratorR>
391 inline _GLIBCXX17_CONSTEXPR
auto
392 operator-(
const reverse_iterator<_IteratorL>& __x,
393 const reverse_iterator<_IteratorR>& __y)
394 -> decltype(__y.base() - __x.base())
395 {
return __y.base() - __x.base(); }
398 template<
typename _Iterator>
399 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
400 operator+(
typename reverse_iterator<_Iterator>::difference_type __n,
401 const reverse_iterator<_Iterator>& __x)
402 {
return reverse_iterator<_Iterator>(__x.base() - __n); }
404 #if __cplusplus >= 201103L
406 template<
typename _Iterator>
407 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
408 __make_reverse_iterator(_Iterator __i)
409 {
return reverse_iterator<_Iterator>(__i); }
411 # if __cplusplus > 201103L
412 # define __cpp_lib_make_reverse_iterator 201402
417 template<
typename _Iterator>
418 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
424 #if __cplusplus >= 201103L
425 template<
typename _Iterator>
427 __niter_base(reverse_iterator<_Iterator> __it)
428 -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
429 {
return __make_reverse_iterator(__niter_base(__it.base())); }
431 template<
typename _Iterator>
432 struct __is_move_iterator<reverse_iterator<_Iterator> >
433 : __is_move_iterator<_Iterator>
436 template<
typename _Iterator>
438 __miter_base(reverse_iterator<_Iterator> __it)
439 -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
440 {
return __make_reverse_iterator(__miter_base(__it.base())); }
454 template<
typename _Container>
456 :
public iterator<output_iterator_tag, void, void, void, void>
459 _Container* container;
481 #if __cplusplus < 201103L
483 operator=(
typename _Container::const_reference __value)
485 container->push_back(__value);
490 operator=(
const typename _Container::value_type& __value)
492 container->push_back(__value);
497 operator=(
typename _Container::value_type&& __value)
499 container->push_back(std::move(__value));
531 template<
typename _Container>
532 inline back_insert_iterator<_Container>
546 template<
typename _Container>
548 :
public iterator<output_iterator_tag, void, void, void, void>
551 _Container* container;
572 #if __cplusplus < 201103L
574 operator=(
typename _Container::const_reference __value)
576 container->push_front(__value);
581 operator=(
const typename _Container::value_type& __value)
583 container->push_front(__value);
588 operator=(
typename _Container::value_type&& __value)
590 container->push_front(std::move(__value));
622 template<
typename _Container>
623 inline front_insert_iterator<_Container>
641 template<
typename _Container>
643 :
public iterator<output_iterator_tag, void, void, void, void>
646 _Container* container;
647 typename _Container::iterator iter;
683 #if __cplusplus < 201103L
685 operator=(
typename _Container::const_reference __value)
687 iter = container->insert(iter, __value);
693 operator=(
const typename _Container::value_type& __value)
695 iter = container->insert(iter, __value);
701 operator=(
typename _Container::value_type&& __value)
703 iter = container->insert(iter, std::move(__value));
736 template<
typename _Container,
typename _Iterator>
737 inline insert_iterator<_Container>
741 typename _Container::iterator(__i));
746 _GLIBCXX_END_NAMESPACE_VERSION
749 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
751 _GLIBCXX_BEGIN_NAMESPACE_VERSION
760 using std::iterator_traits;
762 template<
typename _Iterator,
typename _Container>
763 class __normal_iterator
766 _Iterator _M_current;
768 typedef iterator_traits<_Iterator> __traits_type;
771 typedef _Iterator iterator_type;
772 typedef typename __traits_type::iterator_category iterator_category;
773 typedef typename __traits_type::value_type value_type;
774 typedef typename __traits_type::difference_type difference_type;
775 typedef typename __traits_type::reference reference;
776 typedef typename __traits_type::pointer pointer;
778 _GLIBCXX_CONSTEXPR __normal_iterator() _GLIBCXX_NOEXCEPT
779 : _M_current(_Iterator()) { }
782 __normal_iterator(
const _Iterator& __i) _GLIBCXX_NOEXCEPT
783 : _M_current(__i) { }
786 template<
typename _Iter>
787 __normal_iterator(
const __normal_iterator<_Iter,
788 typename __enable_if<
789 (std::__are_same<_Iter, typename _Container::pointer>::__value),
790 _Container>::__type>& __i) _GLIBCXX_NOEXCEPT
791 : _M_current(__i.base()) { }
795 operator*() const _GLIBCXX_NOEXCEPT
796 {
return *_M_current; }
799 operator->() const _GLIBCXX_NOEXCEPT
800 {
return _M_current; }
803 operator++() _GLIBCXX_NOEXCEPT
810 operator++(
int) _GLIBCXX_NOEXCEPT
811 {
return __normal_iterator(_M_current++); }
815 operator--() _GLIBCXX_NOEXCEPT
822 operator--(
int) _GLIBCXX_NOEXCEPT
823 {
return __normal_iterator(_M_current--); }
827 operator[](difference_type __n)
const _GLIBCXX_NOEXCEPT
828 {
return _M_current[__n]; }
831 operator+=(difference_type __n) _GLIBCXX_NOEXCEPT
832 { _M_current += __n;
return *
this; }
835 operator+(difference_type __n)
const _GLIBCXX_NOEXCEPT
836 {
return __normal_iterator(_M_current + __n); }
839 operator-=(difference_type __n) _GLIBCXX_NOEXCEPT
840 { _M_current -= __n;
return *
this; }
843 operator-(difference_type __n)
const _GLIBCXX_NOEXCEPT
844 {
return __normal_iterator(_M_current - __n); }
847 base() const _GLIBCXX_NOEXCEPT
848 {
return _M_current; }
860 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
862 operator==(
const __normal_iterator<_IteratorL, _Container>& __lhs,
863 const __normal_iterator<_IteratorR, _Container>& __rhs)
865 {
return __lhs.base() == __rhs.base(); }
867 template<
typename _Iterator,
typename _Container>
869 operator==(
const __normal_iterator<_Iterator, _Container>& __lhs,
870 const __normal_iterator<_Iterator, _Container>& __rhs)
872 {
return __lhs.base() == __rhs.base(); }
874 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
876 operator!=(
const __normal_iterator<_IteratorL, _Container>& __lhs,
877 const __normal_iterator<_IteratorR, _Container>& __rhs)
879 {
return __lhs.base() != __rhs.base(); }
881 template<
typename _Iterator,
typename _Container>
883 operator!=(
const __normal_iterator<_Iterator, _Container>& __lhs,
884 const __normal_iterator<_Iterator, _Container>& __rhs)
886 {
return __lhs.base() != __rhs.base(); }
889 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
891 operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
892 const __normal_iterator<_IteratorR, _Container>& __rhs)
894 {
return __lhs.base() < __rhs.base(); }
896 template<
typename _Iterator,
typename _Container>
898 operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
899 const __normal_iterator<_Iterator, _Container>& __rhs)
901 {
return __lhs.base() < __rhs.base(); }
903 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
905 operator>(
const __normal_iterator<_IteratorL, _Container>& __lhs,
906 const __normal_iterator<_IteratorR, _Container>& __rhs)
908 {
return __lhs.base() > __rhs.base(); }
910 template<
typename _Iterator,
typename _Container>
912 operator>(
const __normal_iterator<_Iterator, _Container>& __lhs,
913 const __normal_iterator<_Iterator, _Container>& __rhs)
915 {
return __lhs.base() > __rhs.base(); }
917 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
919 operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
920 const __normal_iterator<_IteratorR, _Container>& __rhs)
922 {
return __lhs.base() <= __rhs.base(); }
924 template<
typename _Iterator,
typename _Container>
926 operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
927 const __normal_iterator<_Iterator, _Container>& __rhs)
929 {
return __lhs.base() <= __rhs.base(); }
931 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
933 operator>=(
const __normal_iterator<_IteratorL, _Container>& __lhs,
934 const __normal_iterator<_IteratorR, _Container>& __rhs)
936 {
return __lhs.base() >= __rhs.base(); }
938 template<
typename _Iterator,
typename _Container>
940 operator>=(
const __normal_iterator<_Iterator, _Container>& __lhs,
941 const __normal_iterator<_Iterator, _Container>& __rhs)
943 {
return __lhs.base() >= __rhs.base(); }
949 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
950 #if __cplusplus >= 201103L
953 operator-(
const __normal_iterator<_IteratorL, _Container>& __lhs,
954 const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
955 -> decltype(__lhs.base() - __rhs.base())
957 inline typename __normal_iterator<_IteratorL, _Container>::difference_type
958 operator-(
const __normal_iterator<_IteratorL, _Container>& __lhs,
959 const __normal_iterator<_IteratorR, _Container>& __rhs)
961 {
return __lhs.base() - __rhs.base(); }
963 template<
typename _Iterator,
typename _Container>
964 inline typename __normal_iterator<_Iterator, _Container>::difference_type
965 operator-(
const __normal_iterator<_Iterator, _Container>& __lhs,
966 const __normal_iterator<_Iterator, _Container>& __rhs)
968 {
return __lhs.base() - __rhs.base(); }
970 template<
typename _Iterator,
typename _Container>
971 inline __normal_iterator<_Iterator, _Container>
972 operator+(
typename __normal_iterator<_Iterator, _Container>::difference_type
973 __n,
const __normal_iterator<_Iterator, _Container>& __i)
975 {
return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
977 _GLIBCXX_END_NAMESPACE_VERSION
980 namespace std _GLIBCXX_VISIBILITY(default)
982 _GLIBCXX_BEGIN_NAMESPACE_VERSION
984 template<
typename _Iterator,
typename _Container>
986 __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
987 {
return __it.base(); }
989 _GLIBCXX_END_NAMESPACE_VERSION
992 #if __cplusplus >= 201103L
994 namespace std _GLIBCXX_VISIBILITY(default)
996 _GLIBCXX_BEGIN_NAMESPACE_VERSION
1012 template<
typename _Iterator>
1016 _Iterator _M_current;
1018 typedef iterator_traits<_Iterator> __traits_type;
1019 typedef typename __traits_type::reference __base_ref;
1022 typedef _Iterator iterator_type;
1023 typedef typename __traits_type::iterator_category iterator_category;
1024 typedef typename __traits_type::value_type value_type;
1025 typedef typename __traits_type::difference_type difference_type;
1027 typedef _Iterator pointer;
1030 typedef typename conditional<is_reference<__base_ref>::value,
1031 typename remove_reference<__base_ref>::type&&,
1032 __base_ref>::type reference;
1034 _GLIBCXX17_CONSTEXPR
1038 explicit _GLIBCXX17_CONSTEXPR
1039 move_iterator(iterator_type __i)
1040 : _M_current(__i) { }
1042 template<
typename _Iter>
1043 _GLIBCXX17_CONSTEXPR
1045 : _M_current(__i.base()) { }
1047 _GLIBCXX17_CONSTEXPR iterator_type
1049 {
return _M_current; }
1051 _GLIBCXX17_CONSTEXPR reference
1053 {
return static_cast<reference
>(*_M_current); }
1055 _GLIBCXX17_CONSTEXPR pointer
1057 {
return _M_current; }
1059 _GLIBCXX17_CONSTEXPR move_iterator&
1066 _GLIBCXX17_CONSTEXPR move_iterator
1069 move_iterator __tmp = *
this;
1074 _GLIBCXX17_CONSTEXPR move_iterator&
1081 _GLIBCXX17_CONSTEXPR move_iterator
1084 move_iterator __tmp = *
this;
1089 _GLIBCXX17_CONSTEXPR move_iterator
1090 operator+(difference_type __n)
const
1091 {
return move_iterator(_M_current + __n); }
1093 _GLIBCXX17_CONSTEXPR move_iterator&
1094 operator+=(difference_type __n)
1100 _GLIBCXX17_CONSTEXPR move_iterator
1101 operator-(difference_type __n)
const
1102 {
return move_iterator(_M_current - __n); }
1104 _GLIBCXX17_CONSTEXPR move_iterator&
1105 operator-=(difference_type __n)
1111 _GLIBCXX17_CONSTEXPR reference
1112 operator[](difference_type __n)
const
1113 {
return std::move(_M_current[__n]); }
1119 template<
typename _IteratorL,
typename _IteratorR>
1120 inline _GLIBCXX17_CONSTEXPR
bool
1123 {
return __x.base() == __y.base(); }
1125 template<
typename _Iterator>
1126 inline _GLIBCXX17_CONSTEXPR
bool
1127 operator==(
const move_iterator<_Iterator>& __x,
1128 const move_iterator<_Iterator>& __y)
1129 {
return __x.base() == __y.base(); }
1131 template<
typename _IteratorL,
typename _IteratorR>
1132 inline _GLIBCXX17_CONSTEXPR
bool
1133 operator!=(
const move_iterator<_IteratorL>& __x,
1134 const move_iterator<_IteratorR>& __y)
1135 {
return !(__x == __y); }
1137 template<
typename _Iterator>
1138 inline _GLIBCXX17_CONSTEXPR
bool
1139 operator!=(
const move_iterator<_Iterator>& __x,
1140 const move_iterator<_Iterator>& __y)
1141 {
return !(__x == __y); }
1143 template<
typename _IteratorL,
typename _IteratorR>
1144 inline _GLIBCXX17_CONSTEXPR
bool
1145 operator<(const move_iterator<_IteratorL>& __x,
1146 const move_iterator<_IteratorR>& __y)
1147 {
return __x.base() < __y.base(); }
1149 template<
typename _Iterator>
1150 inline _GLIBCXX17_CONSTEXPR
bool
1151 operator<(const move_iterator<_Iterator>& __x,
1152 const move_iterator<_Iterator>& __y)
1153 {
return __x.base() < __y.base(); }
1155 template<
typename _IteratorL,
typename _IteratorR>
1156 inline _GLIBCXX17_CONSTEXPR
bool
1157 operator<=(const move_iterator<_IteratorL>& __x,
1158 const move_iterator<_IteratorR>& __y)
1159 {
return !(__y < __x); }
1161 template<
typename _Iterator>
1162 inline _GLIBCXX17_CONSTEXPR
bool
1163 operator<=(const move_iterator<_Iterator>& __x,
1164 const move_iterator<_Iterator>& __y)
1165 {
return !(__y < __x); }
1167 template<
typename _IteratorL,
typename _IteratorR>
1168 inline _GLIBCXX17_CONSTEXPR
bool
1169 operator>(
const move_iterator<_IteratorL>& __x,
1170 const move_iterator<_IteratorR>& __y)
1171 {
return __y < __x; }
1173 template<
typename _Iterator>
1174 inline _GLIBCXX17_CONSTEXPR
bool
1175 operator>(
const move_iterator<_Iterator>& __x,
1176 const move_iterator<_Iterator>& __y)
1177 {
return __y < __x; }
1179 template<
typename _IteratorL,
typename _IteratorR>
1180 inline _GLIBCXX17_CONSTEXPR
bool
1181 operator>=(
const move_iterator<_IteratorL>& __x,
1182 const move_iterator<_IteratorR>& __y)
1183 {
return !(__x < __y); }
1185 template<
typename _Iterator>
1186 inline _GLIBCXX17_CONSTEXPR
bool
1187 operator>=(
const move_iterator<_Iterator>& __x,
1188 const move_iterator<_Iterator>& __y)
1189 {
return !(__x < __y); }
1192 template<
typename _IteratorL,
typename _IteratorR>
1193 inline _GLIBCXX17_CONSTEXPR
auto
1194 operator-(
const move_iterator<_IteratorL>& __x,
1195 const move_iterator<_IteratorR>& __y)
1196 -> decltype(__x.base() - __y.base())
1197 {
return __x.base() - __y.base(); }
1199 template<
typename _Iterator>
1200 inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
1201 operator+(
typename move_iterator<_Iterator>::difference_type __n,
1202 const move_iterator<_Iterator>& __x)
1203 {
return __x + __n; }
1205 template<
typename _Iterator>
1206 inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
1207 make_move_iterator(_Iterator __i)
1208 {
return move_iterator<_Iterator>(__i); }
1210 template<
typename _Iterator,
typename _ReturnType
1211 =
typename conditional<__move_if_noexcept_cond
1212 <
typename iterator_traits<_Iterator>::value_type>::value,
1213 _Iterator, move_iterator<_Iterator>>::type>
1214 inline _GLIBCXX17_CONSTEXPR _ReturnType
1215 __make_move_if_noexcept_iterator(_Iterator __i)
1216 {
return _ReturnType(__i); }
1220 template<
typename _Tp,
typename _ReturnType
1221 =
typename conditional<__move_if_noexcept_cond<_Tp>::value,
1222 const _Tp*, move_iterator<_Tp*>>::type>
1223 inline _GLIBCXX17_CONSTEXPR _ReturnType
1224 __make_move_if_noexcept_iterator(_Tp* __i)
1225 {
return _ReturnType(__i); }
1229 template<
typename _Iterator>
1231 __niter_base(move_iterator<_Iterator> __it)
1232 -> decltype(make_move_iterator(__niter_base(__it.base())))
1233 {
return make_move_iterator(__niter_base(__it.base())); }
1235 template<
typename _Iterator>
1236 struct __is_move_iterator<move_iterator<_Iterator> >
1238 enum { __value = 1 };
1239 typedef __true_type __type;
1242 template<
typename _Iterator>
1244 __miter_base(move_iterator<_Iterator> __it)
1245 -> decltype(__miter_base(__it.base()))
1246 {
return __miter_base(__it.base()); }
1248 _GLIBCXX_END_NAMESPACE_VERSION
1251 #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
1252 #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
1253 std::__make_move_if_noexcept_iterator(_Iter)
1255 #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter)
1256 #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
1259 #ifdef _GLIBCXX_DEBUG
_GLIBCXX17_CONSTEXPR reverse_iterator(const reverse_iterator< _Iter > &__x)
back_insert_iterator(_Container &__x)
The only way to create this iterator is with a container.
Turns assignment into insertion.
complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
insert_iterator & operator*()
Simply returns *this.
_GLIBCXX17_CONSTEXPR reverse_iterator & operator--()
_Container container_type
A nested typedef for the type of whatever container you used.
front_insert_iterator & operator=(const typename _Container::value_type &__value)
_GLIBCXX17_CONSTEXPR reference operator*() const
back_insert_iterator operator++(int)
Simply returns *this. (This iterator does not move.)
_GLIBCXX17_CONSTEXPR reverse_iterator(iterator_type __x)
front_insert_iterator(_Container &__x)
The only way to create this iterator is with a container.
_GLIBCXX17_CONSTEXPR reverse_iterator operator--(int)
Turns assignment into insertion.
back_insert_iterator & operator*()
Simply returns *this.
front_insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
_Container container_type
A nested typedef for the type of whatever container you used.
insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
_GLIBCXX17_CONSTEXPR reverse_iterator operator-(difference_type __n) const
_GLIBCXX17_CONSTEXPR pointer operator->() const
front_insert_iterator & operator*()
Simply returns *this.
_GLIBCXX17_CONSTEXPR reverse_iterator< _Iterator > make_reverse_iterator(_Iterator __i)
Generator function for reverse_iterator.
_GLIBCXX17_CONSTEXPR reverse_iterator operator++(int)
insert_iterator & operator=(const typename _Container::value_type &__value)
Turns assignment into insertion.
_GLIBCXX17_CONSTEXPR reference operator[](difference_type __n) const
_GLIBCXX17_CONSTEXPR reverse_iterator()
front_insert_iterator< _Container > front_inserter(_Container &__x)
_GLIBCXX17_CONSTEXPR iterator_type base() const
back_insert_iterator & operator=(const typename _Container::value_type &__value)
front_insert_iterator operator++(int)
Simply returns *this. (This iterator does not move.)
_GLIBCXX17_CONSTEXPR reverse_iterator & operator+=(difference_type __n)
_GLIBCXX17_CONSTEXPR reverse_iterator & operator-=(difference_type __n)
_GLIBCXX17_CONSTEXPR reverse_iterator & operator++()
back_insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
insert_iterator & operator++(int)
Simply returns *this. (This iterator does not move.)
insert_iterator(_Container &__x, typename _Container::iterator __i)
_GLIBCXX17_CONSTEXPR reverse_iterator(const reverse_iterator &__x)
_Container container_type
A nested typedef for the type of whatever container you used.
_GLIBCXX17_CONSTEXPR reverse_iterator operator+(difference_type __n) const
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
back_insert_iterator< _Container > back_inserter(_Container &__x)
complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y.
insert_iterator< _Container > inserter(_Container &__x, _Iterator __i)