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;
131 explicit _GLIBCXX17_CONSTEXPR
139 : current(__x.current) { }
145 template<
typename _Iter>
148 : current(__x.
base()) { }
153 _GLIBCXX17_CONSTEXPR iterator_type
167 _GLIBCXX17_CONSTEXPR reference
170 _Iterator __tmp = current;
179 _GLIBCXX17_CONSTEXPR pointer
282 _GLIBCXX17_CONSTEXPR reference
284 {
return *(*
this + __n); }
297 template<
typename _Iterator>
298 inline _GLIBCXX17_CONSTEXPR
bool 301 {
return __x.
base() == __y.
base(); }
303 template<
typename _Iterator>
304 inline _GLIBCXX17_CONSTEXPR
bool 305 operator<(const reverse_iterator<_Iterator>& __x,
306 const reverse_iterator<_Iterator>& __y)
307 {
return __y.base() < __x.base(); }
309 template<
typename _Iterator>
310 inline _GLIBCXX17_CONSTEXPR
bool 311 operator!=(
const reverse_iterator<_Iterator>& __x,
312 const reverse_iterator<_Iterator>& __y)
313 {
return !(__x == __y); }
315 template<
typename _Iterator>
316 inline _GLIBCXX17_CONSTEXPR
bool 317 operator>(
const reverse_iterator<_Iterator>& __x,
318 const reverse_iterator<_Iterator>& __y)
319 {
return __y < __x; }
321 template<
typename _Iterator>
322 inline _GLIBCXX17_CONSTEXPR
bool 323 operator<=(const reverse_iterator<_Iterator>& __x,
324 const reverse_iterator<_Iterator>& __y)
325 {
return !(__y < __x); }
327 template<
typename _Iterator>
328 inline _GLIBCXX17_CONSTEXPR
bool 329 operator>=(
const reverse_iterator<_Iterator>& __x,
330 const reverse_iterator<_Iterator>& __y)
331 {
return !(__x < __y); }
335 template<
typename _IteratorL,
typename _IteratorR>
336 inline _GLIBCXX17_CONSTEXPR
bool 337 operator==(
const reverse_iterator<_IteratorL>& __x,
338 const reverse_iterator<_IteratorR>& __y)
339 {
return __x.base() == __y.base(); }
341 template<
typename _IteratorL,
typename _IteratorR>
342 inline _GLIBCXX17_CONSTEXPR
bool 343 operator<(const reverse_iterator<_IteratorL>& __x,
344 const reverse_iterator<_IteratorR>& __y)
345 {
return __y.base() < __x.base(); }
347 template<
typename _IteratorL,
typename _IteratorR>
348 inline _GLIBCXX17_CONSTEXPR
bool 349 operator!=(
const reverse_iterator<_IteratorL>& __x,
350 const reverse_iterator<_IteratorR>& __y)
351 {
return !(__x == __y); }
353 template<
typename _IteratorL,
typename _IteratorR>
354 inline _GLIBCXX17_CONSTEXPR
bool 355 operator>(
const reverse_iterator<_IteratorL>& __x,
356 const reverse_iterator<_IteratorR>& __y)
357 {
return __y < __x; }
359 template<
typename _IteratorL,
typename _IteratorR>
360 inline _GLIBCXX17_CONSTEXPR
bool 361 operator<=(const reverse_iterator<_IteratorL>& __x,
362 const reverse_iterator<_IteratorR>& __y)
363 {
return !(__y < __x); }
365 template<
typename _IteratorL,
typename _IteratorR>
366 inline _GLIBCXX17_CONSTEXPR
bool 367 operator>=(
const reverse_iterator<_IteratorL>& __x,
368 const reverse_iterator<_IteratorR>& __y)
369 {
return !(__x < __y); }
372 #if __cplusplus < 201103L 373 template<
typename _Iterator>
374 inline typename reverse_iterator<_Iterator>::difference_type
375 operator-(
const reverse_iterator<_Iterator>& __x,
376 const reverse_iterator<_Iterator>& __y)
377 {
return __y.base() - __x.base(); }
379 template<
typename _IteratorL,
typename _IteratorR>
380 inline typename reverse_iterator<_IteratorL>::difference_type
381 operator-(
const reverse_iterator<_IteratorL>& __x,
382 const reverse_iterator<_IteratorR>& __y)
383 {
return __y.base() - __x.base(); }
387 template<
typename _IteratorL,
typename _IteratorR>
388 inline _GLIBCXX17_CONSTEXPR
auto 389 operator-(
const reverse_iterator<_IteratorL>& __x,
390 const reverse_iterator<_IteratorR>& __y)
391 -> decltype(__y.base() - __x.base())
392 {
return __y.base() - __x.base(); }
395 template<
typename _Iterator>
396 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
397 operator+(
typename reverse_iterator<_Iterator>::difference_type __n,
398 const reverse_iterator<_Iterator>& __x)
399 {
return reverse_iterator<_Iterator>(__x.base() - __n); }
401 #if __cplusplus >= 201103L 403 template<
typename _Iterator>
404 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
405 __make_reverse_iterator(_Iterator __i)
406 {
return reverse_iterator<_Iterator>(__i); }
408 # if __cplusplus > 201103L 409 # define __cpp_lib_make_reverse_iterator 201402 414 template<
typename _Iterator>
415 inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
421 #if __cplusplus >= 201103L 422 template<
typename _Iterator>
424 __niter_base(reverse_iterator<_Iterator> __it)
425 -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
426 {
return __make_reverse_iterator(__niter_base(__it.base())); }
428 template<
typename _Iterator>
429 struct __is_move_iterator<reverse_iterator<_Iterator> >
430 : __is_move_iterator<_Iterator>
433 template<
typename _Iterator>
435 __miter_base(reverse_iterator<_Iterator> __it)
436 -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
437 {
return __make_reverse_iterator(__miter_base(__it.base())); }
451 template<
typename _Container>
453 :
public iterator<output_iterator_tag, void, void, void, void>
456 _Container* container;
478 #if __cplusplus < 201103L 480 operator=(
typename _Container::const_reference __value)
482 container->push_back(__value);
487 operator=(
const typename _Container::value_type& __value)
489 container->push_back(__value);
494 operator=(
typename _Container::value_type&& __value)
496 container->push_back(std::move(__value));
528 template<
typename _Container>
529 inline back_insert_iterator<_Container>
543 template<
typename _Container>
545 :
public iterator<output_iterator_tag, void, void, void, void>
548 _Container* container;
569 #if __cplusplus < 201103L 571 operator=(
typename _Container::const_reference __value)
573 container->push_front(__value);
578 operator=(
const typename _Container::value_type& __value)
580 container->push_front(__value);
585 operator=(
typename _Container::value_type&& __value)
587 container->push_front(std::move(__value));
619 template<
typename _Container>
620 inline front_insert_iterator<_Container>
638 template<
typename _Container>
640 :
public iterator<output_iterator_tag, void, void, void, void>
643 _Container* container;
644 typename _Container::iterator iter;
680 #if __cplusplus < 201103L 682 operator=(
typename _Container::const_reference __value)
684 iter = container->insert(iter, __value);
690 operator=(
const typename _Container::value_type& __value)
692 iter = container->insert(iter, __value);
698 operator=(
typename _Container::value_type&& __value)
700 iter = container->insert(iter, std::move(__value));
734 template<
typename _Container,
typename _Iterator>
735 inline insert_iterator<_Container>
739 typename _Container::iterator(__i));
744 _GLIBCXX_END_NAMESPACE_VERSION
747 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
749 _GLIBCXX_BEGIN_NAMESPACE_VERSION
758 using std::iterator_traits;
760 template<
typename _Iterator,
typename _Container>
761 class __normal_iterator
764 _Iterator _M_current;
766 typedef iterator_traits<_Iterator> __traits_type;
769 typedef _Iterator iterator_type;
770 typedef typename __traits_type::iterator_category iterator_category;
771 typedef typename __traits_type::value_type value_type;
772 typedef typename __traits_type::difference_type difference_type;
773 typedef typename __traits_type::reference reference;
774 typedef typename __traits_type::pointer pointer;
776 _GLIBCXX_CONSTEXPR __normal_iterator() _GLIBCXX_NOEXCEPT
777 : _M_current(_Iterator()) { }
780 __normal_iterator(
const _Iterator& __i) _GLIBCXX_NOEXCEPT
781 : _M_current(__i) { }
784 template<
typename _Iter>
785 __normal_iterator(
const __normal_iterator<_Iter,
786 typename __enable_if<
787 (std::__are_same<_Iter, typename _Container::pointer>::__value),
788 _Container>::__type>& __i) _GLIBCXX_NOEXCEPT
789 : _M_current(__i.base()) { }
793 operator*() const _GLIBCXX_NOEXCEPT
794 {
return *_M_current; }
797 operator->() const _GLIBCXX_NOEXCEPT
798 {
return _M_current; }
801 operator++() _GLIBCXX_NOEXCEPT
808 operator++(
int) _GLIBCXX_NOEXCEPT
809 {
return __normal_iterator(_M_current++); }
813 operator--() _GLIBCXX_NOEXCEPT
820 operator--(
int) _GLIBCXX_NOEXCEPT
821 {
return __normal_iterator(_M_current--); }
825 operator[](difference_type __n)
const _GLIBCXX_NOEXCEPT
826 {
return _M_current[__n]; }
829 operator+=(difference_type __n) _GLIBCXX_NOEXCEPT
830 { _M_current += __n;
return *
this; }
833 operator+(difference_type __n)
const _GLIBCXX_NOEXCEPT
834 {
return __normal_iterator(_M_current + __n); }
837 operator-=(difference_type __n) _GLIBCXX_NOEXCEPT
838 { _M_current -= __n;
return *
this; }
841 operator-(difference_type __n)
const _GLIBCXX_NOEXCEPT
842 {
return __normal_iterator(_M_current - __n); }
845 base() const _GLIBCXX_NOEXCEPT
846 {
return _M_current; }
858 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
860 operator==(
const __normal_iterator<_IteratorL, _Container>& __lhs,
861 const __normal_iterator<_IteratorR, _Container>& __rhs)
863 {
return __lhs.base() == __rhs.base(); }
865 template<
typename _Iterator,
typename _Container>
867 operator==(
const __normal_iterator<_Iterator, _Container>& __lhs,
868 const __normal_iterator<_Iterator, _Container>& __rhs)
870 {
return __lhs.base() == __rhs.base(); }
872 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
874 operator!=(
const __normal_iterator<_IteratorL, _Container>& __lhs,
875 const __normal_iterator<_IteratorR, _Container>& __rhs)
877 {
return __lhs.base() != __rhs.base(); }
879 template<
typename _Iterator,
typename _Container>
881 operator!=(
const __normal_iterator<_Iterator, _Container>& __lhs,
882 const __normal_iterator<_Iterator, _Container>& __rhs)
884 {
return __lhs.base() != __rhs.base(); }
887 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
889 operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
890 const __normal_iterator<_IteratorR, _Container>& __rhs)
892 {
return __lhs.base() < __rhs.base(); }
894 template<
typename _Iterator,
typename _Container>
896 operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
897 const __normal_iterator<_Iterator, _Container>& __rhs)
899 {
return __lhs.base() < __rhs.base(); }
901 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
903 operator>(
const __normal_iterator<_IteratorL, _Container>& __lhs,
904 const __normal_iterator<_IteratorR, _Container>& __rhs)
906 {
return __lhs.base() > __rhs.base(); }
908 template<
typename _Iterator,
typename _Container>
910 operator>(
const __normal_iterator<_Iterator, _Container>& __lhs,
911 const __normal_iterator<_Iterator, _Container>& __rhs)
913 {
return __lhs.base() > __rhs.base(); }
915 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
917 operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
918 const __normal_iterator<_IteratorR, _Container>& __rhs)
920 {
return __lhs.base() <= __rhs.base(); }
922 template<
typename _Iterator,
typename _Container>
924 operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
925 const __normal_iterator<_Iterator, _Container>& __rhs)
927 {
return __lhs.base() <= __rhs.base(); }
929 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
931 operator>=(
const __normal_iterator<_IteratorL, _Container>& __lhs,
932 const __normal_iterator<_IteratorR, _Container>& __rhs)
934 {
return __lhs.base() >= __rhs.base(); }
936 template<
typename _Iterator,
typename _Container>
938 operator>=(
const __normal_iterator<_Iterator, _Container>& __lhs,
939 const __normal_iterator<_Iterator, _Container>& __rhs)
941 {
return __lhs.base() >= __rhs.base(); }
947 template<
typename _IteratorL,
typename _IteratorR,
typename _Container>
948 #if __cplusplus >= 201103L 951 operator-(
const __normal_iterator<_IteratorL, _Container>& __lhs,
952 const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
953 -> decltype(__lhs.base() - __rhs.base())
955 inline typename __normal_iterator<_IteratorL, _Container>::difference_type
956 operator-(
const __normal_iterator<_IteratorL, _Container>& __lhs,
957 const __normal_iterator<_IteratorR, _Container>& __rhs)
959 {
return __lhs.base() - __rhs.base(); }
961 template<
typename _Iterator,
typename _Container>
962 inline typename __normal_iterator<_Iterator, _Container>::difference_type
963 operator-(
const __normal_iterator<_Iterator, _Container>& __lhs,
964 const __normal_iterator<_Iterator, _Container>& __rhs)
966 {
return __lhs.base() - __rhs.base(); }
968 template<
typename _Iterator,
typename _Container>
969 inline __normal_iterator<_Iterator, _Container>
970 operator+(
typename __normal_iterator<_Iterator, _Container>::difference_type
971 __n,
const __normal_iterator<_Iterator, _Container>& __i)
973 {
return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
975 _GLIBCXX_END_NAMESPACE_VERSION
978 namespace std _GLIBCXX_VISIBILITY(default)
980 _GLIBCXX_BEGIN_NAMESPACE_VERSION
982 template<
typename _Iterator,
typename _Container>
984 __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
985 {
return __it.base(); }
987 #if __cplusplus >= 201103L 1003 template<
typename _Iterator>
1007 _Iterator _M_current;
1009 typedef iterator_traits<_Iterator> __traits_type;
1010 typedef typename __traits_type::reference __base_ref;
1013 typedef _Iterator iterator_type;
1014 typedef typename __traits_type::iterator_category iterator_category;
1015 typedef typename __traits_type::value_type value_type;
1016 typedef typename __traits_type::difference_type difference_type;
1018 typedef _Iterator pointer;
1022 typename remove_reference<__base_ref>::type&&,
1023 __base_ref>::type reference;
1025 _GLIBCXX17_CONSTEXPR
1029 explicit _GLIBCXX17_CONSTEXPR
1031 : _M_current(__i) { }
1033 template<
typename _Iter>
1034 _GLIBCXX17_CONSTEXPR
1036 : _M_current(__i.base()) { }
1038 _GLIBCXX17_CONSTEXPR iterator_type
1040 {
return _M_current; }
1042 _GLIBCXX17_CONSTEXPR reference
1044 {
return static_cast<reference
>(*_M_current); }
1046 _GLIBCXX17_CONSTEXPR pointer
1048 {
return _M_current; }
1081 operator+(difference_type __n)
const 1085 operator+=(difference_type __n)
1092 operator-(difference_type __n)
const 1096 operator-=(difference_type __n)
1102 _GLIBCXX17_CONSTEXPR reference
1103 operator[](difference_type __n)
const 1104 {
return std::move(_M_current[__n]); }
1110 template<
typename _IteratorL,
typename _IteratorR>
1111 inline _GLIBCXX17_CONSTEXPR
bool 1114 {
return __x.base() == __y.base(); }
1116 template<
typename _Iterator>
1117 inline _GLIBCXX17_CONSTEXPR
bool 1118 operator==(
const move_iterator<_Iterator>& __x,
1119 const move_iterator<_Iterator>& __y)
1120 {
return __x.base() == __y.base(); }
1122 template<
typename _IteratorL,
typename _IteratorR>
1123 inline _GLIBCXX17_CONSTEXPR
bool 1124 operator!=(
const move_iterator<_IteratorL>& __x,
1125 const move_iterator<_IteratorR>& __y)
1126 {
return !(__x == __y); }
1128 template<
typename _Iterator>
1129 inline _GLIBCXX17_CONSTEXPR
bool 1130 operator!=(
const move_iterator<_Iterator>& __x,
1131 const move_iterator<_Iterator>& __y)
1132 {
return !(__x == __y); }
1134 template<
typename _IteratorL,
typename _IteratorR>
1135 inline _GLIBCXX17_CONSTEXPR
bool 1136 operator<(const move_iterator<_IteratorL>& __x,
1137 const move_iterator<_IteratorR>& __y)
1138 {
return __x.base() < __y.base(); }
1140 template<
typename _Iterator>
1141 inline _GLIBCXX17_CONSTEXPR
bool 1142 operator<(const move_iterator<_Iterator>& __x,
1143 const move_iterator<_Iterator>& __y)
1144 {
return __x.base() < __y.base(); }
1146 template<
typename _IteratorL,
typename _IteratorR>
1147 inline _GLIBCXX17_CONSTEXPR
bool 1148 operator<=(const move_iterator<_IteratorL>& __x,
1149 const move_iterator<_IteratorR>& __y)
1150 {
return !(__y < __x); }
1152 template<
typename _Iterator>
1153 inline _GLIBCXX17_CONSTEXPR
bool 1154 operator<=(const move_iterator<_Iterator>& __x,
1155 const move_iterator<_Iterator>& __y)
1156 {
return !(__y < __x); }
1158 template<
typename _IteratorL,
typename _IteratorR>
1159 inline _GLIBCXX17_CONSTEXPR
bool 1160 operator>(
const move_iterator<_IteratorL>& __x,
1161 const move_iterator<_IteratorR>& __y)
1162 {
return __y < __x; }
1164 template<
typename _Iterator>
1165 inline _GLIBCXX17_CONSTEXPR
bool 1166 operator>(
const move_iterator<_Iterator>& __x,
1167 const move_iterator<_Iterator>& __y)
1168 {
return __y < __x; }
1170 template<
typename _IteratorL,
typename _IteratorR>
1171 inline _GLIBCXX17_CONSTEXPR
bool 1172 operator>=(
const move_iterator<_IteratorL>& __x,
1173 const move_iterator<_IteratorR>& __y)
1174 {
return !(__x < __y); }
1176 template<
typename _Iterator>
1177 inline _GLIBCXX17_CONSTEXPR
bool 1178 operator>=(
const move_iterator<_Iterator>& __x,
1179 const move_iterator<_Iterator>& __y)
1180 {
return !(__x < __y); }
1183 template<
typename _IteratorL,
typename _IteratorR>
1184 inline _GLIBCXX17_CONSTEXPR
auto 1185 operator-(
const move_iterator<_IteratorL>& __x,
1186 const move_iterator<_IteratorR>& __y)
1187 -> decltype(__x.base() - __y.base())
1188 {
return __x.base() - __y.base(); }
1190 template<
typename _Iterator>
1191 inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
1192 operator+(
typename move_iterator<_Iterator>::difference_type __n,
1193 const move_iterator<_Iterator>& __x)
1194 {
return __x + __n; }
1196 template<
typename _Iterator>
1197 inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
1198 make_move_iterator(_Iterator __i)
1199 {
return move_iterator<_Iterator>(__i); }
1201 template<
typename _Iterator,
typename _ReturnType
1202 =
typename conditional<__move_if_noexcept_cond
1203 <
typename iterator_traits<_Iterator>::value_type>::value,
1204 _Iterator, move_iterator<_Iterator>>::type>
1205 inline _GLIBCXX17_CONSTEXPR _ReturnType
1206 __make_move_if_noexcept_iterator(_Iterator __i)
1207 {
return _ReturnType(__i); }
1211 template<
typename _Tp,
typename _ReturnType
1212 =
typename conditional<__move_if_noexcept_cond<_Tp>::value,
1213 const _Tp*, move_iterator<_Tp*>>::type>
1214 inline _GLIBCXX17_CONSTEXPR _ReturnType
1215 __make_move_if_noexcept_iterator(_Tp* __i)
1216 {
return _ReturnType(__i); }
1220 template<
typename _Iterator>
1222 __niter_base(move_iterator<_Iterator> __it)
1223 -> decltype(make_move_iterator(__niter_base(__it.base())))
1224 {
return make_move_iterator(__niter_base(__it.base())); }
1226 template<
typename _Iterator>
1227 struct __is_move_iterator<move_iterator<_Iterator> >
1229 enum { __value = 1 };
1230 typedef __true_type __type;
1233 template<
typename _Iterator>
1235 __miter_base(move_iterator<_Iterator> __it)
1236 -> decltype(__miter_base(__it.base()))
1237 {
return __miter_base(__it.base()); }
1239 #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter) 1240 #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \ 1241 std::__make_move_if_noexcept_iterator(_Iter) 1243 #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter) 1244 #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter) 1247 #if __cpp_deduction_guides >= 201606 1250 template<
typename _InputIterator>
1252 typename iterator_traits<_InputIterator>::value_type::first_type>;
1254 template<
typename _InputIterator>
1255 using __iter_val_t =
1256 typename iterator_traits<_InputIterator>::value_type::second_type;
1258 template<
typename _T1,
typename _T2>
1261 template<
typename _InputIterator>
1262 using __iter_to_alloc_t =
1263 pair<add_const_t<__iter_key_t<_InputIterator>>,
1264 __iter_val_t<_InputIterator>>;
1268 _GLIBCXX_END_NAMESPACE_VERSION
1271 #ifdef _GLIBCXX_DEBUG
insert_iterator(_Container &__x, typename _Container::iterator __i)
_GLIBCXX17_CONSTEXPR reference operator*() const
_GLIBCXX17_CONSTEXPR reverse_iterator(iterator_type __x)
front_insert_iterator operator++(int)
Simply returns *this. (This iterator does not move.)
Define a member typedef type to one of two argument types.
_Container container_type
A nested typedef for the type of whatever container you used.
_GLIBCXX17_CONSTEXPR reverse_iterator(const reverse_iterator &__x)
complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y.
_Container container_type
A nested typedef for the type of whatever container you used.
GNU extensions for public use.
_GLIBCXX17_CONSTEXPR pointer operator->() const
insert_iterator< _Container > inserter(_Container &__x, _Iterator __i)
front_insert_iterator(_Container &__x)
The only way to create this iterator is with a container.
_GLIBCXX17_CONSTEXPR reference operator[](difference_type __n) const
_Container container_type
A nested typedef for the type of whatever container you used.
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y.
Turns assignment into insertion.
_GLIBCXX17_CONSTEXPR reverse_iterator operator-(difference_type __n) const
back_insert_iterator(_Container &__x)
The only way to create this iterator is with a container.
_GLIBCXX17_CONSTEXPR reverse_iterator & operator+=(difference_type __n)
_GLIBCXX17_CONSTEXPR reverse_iterator & operator--()
front_insert_iterator< _Container > front_inserter(_Container &__x)
back_insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
ISO C++ entities toplevel namespace is std.
back_insert_iterator< _Container > back_inserter(_Container &__x)
_GLIBCXX17_CONSTEXPR reverse_iterator(const reverse_iterator< _Iter > &__x)
_GLIBCXX17_CONSTEXPR reverse_iterator< _Iterator > make_reverse_iterator(_Iterator __i)
Generator function for reverse_iterator.
_GLIBCXX17_CONSTEXPR reverse_iterator operator--(int)
_GLIBCXX17_CONSTEXPR reverse_iterator operator+(difference_type __n) const
_GLIBCXX17_CONSTEXPR reverse_iterator & operator-=(difference_type __n)
insert_iterator & operator*()
Simply returns *this.
_GLIBCXX17_CONSTEXPR iterator_type base() const
insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
insert_iterator & operator=(const typename _Container::value_type &__value)
Turns assignment into insertion.
typename remove_const< _Tp >::type remove_const_t
Alias template for remove_const.
_GLIBCXX17_CONSTEXPR reverse_iterator operator++(int)
back_insert_iterator operator++(int)
Simply returns *this. (This iterator does not move.)
_GLIBCXX17_CONSTEXPR reverse_iterator()
Turns assignment into insertion.
back_insert_iterator & operator*()
Simply returns *this.
_GLIBCXX17_CONSTEXPR reverse_iterator & operator++()
front_insert_iterator & operator=(const typename _Container::value_type &__value)
back_insert_iterator & operator=(const typename _Container::value_type &__value)
front_insert_iterator & operator*()
Simply returns *this.
front_insert_iterator & operator++()
Simply returns *this. (This iterator does not move.)
insert_iterator & operator++(int)
Simply returns *this. (This iterator does not move.)