STD::COUNTED_ITERATOR(3cxx)

πŸ’– NAME πŸ’–

okay so bestie, welcome to the std::counted_iterator< _It >(3cxx) page β€” yes, that's the manual name folded in near the top, we're being cute but correct πŸŽ€

std::counted_iterator< _It > β€” an iterator adaptor that keeps track of the distance to the end. That's the whole vibe: it's an adaptor with a countdown to the end, main character energy ✨


✨ SYNOPSIS ✨

include it like this, bestie:

       #include <iterator>

and it inherits std::__detail::__counted_iter_value_type< _It >, std::__detail::__counted_iter_concept< _It >, and std::__detail::__counted_iter_cat< _It >.

🌸 Public Types 🌸

the type aliases are giving exact and iconic:

       using difference_type = iter_difference_t< _It >
       using iterator_type = _It

πŸ’… Public Member Functions πŸ’…

here's the full roster of member functions β€” every single signature, no skipping, because code is sacred 🫢

       constexpr counted_iterator (_It __i, iter_difference_t< _It > __n)
       template<typename _It2 >
           requires convertible_to<const _It2&, _It>constexpr counted_iterator
           (const counted_iterator< _It2 > &__x)"
       constexpr _It base () &&noexcept(is_nothrow_move_constructible_v< _It >)
       constexpr const _It & base () const &noexcept
       constexpr iter_difference_t< _It > count () const noexcept
       constexpr decltype(auto) operator* () const
           noexcept(noexcept(*_M_current))
       constexpr decltype(auto) operator* () noexcept(noexcept(*_M_current))
       constexpr counted_iterator operator+ (iter_difference_t< _It > __n)
           const
       constexpr counted_iterator & operator++ ()
       constexpr decltype(auto) operator++ (int)
       constexpr counted_iterator operator++ (int)
       constexpr counted_iterator & operator+= (iter_difference_t< _It > __n)
       constexpr counted_iterator operator- (iter_difference_t< _It > __n)
           const
       constexpr counted_iterator & operator-- ()
       constexpr counted_iterator operator-- (int)
       constexpr counted_iterator & operator-= (iter_difference_t< _It > __n)
       constexpr auto operator-> () const noexcept
       template<typename _It2 >
           requires assignable_from<_It&, const _It2&>constexpr
           counted_iterator & operator= (const counted_iterator< _It2 > &__x)"
       constexpr decltype(auto) operator[] (iter_difference_t< _It > __n) const
           noexcept(noexcept(_M_current[__n]))

πŸ¦‹ Friends πŸ¦‹

and the friend functions are here too, being all supportive and lowkey essential:

       constexpr iter_rvalue_reference_t< _It > iter_move (const
           counted_iterator &__i)
           noexcept(noexcept(ranges::iter_move(__i._M_current)))
       template<indirectly_swappable< _It > _It2> constexpr void iter_swap
           (const counted_iterator &__x, const counted_iterator< _It2 > &__y)
           noexcept(noexcept(ranges::iter_swap(__x._M_current,
           __y._M_current)))
       constexpr counted_iterator operator+ (iter_difference_t< _It > __n,
           const counted_iterator &__x)
       template<common_with< _It > _It2> constexpr iter_difference_t< _It2 >
           operator- (const counted_iterator &__x, const counted_iterator< _It2
           > &__y)
       constexpr iter_difference_t< _It > operator- (const counted_iterator
           &__x, default_sentinel_t)
       constexpr iter_difference_t< _It > operator- (default_sentinel_t, const
           counted_iterator &__y)
       template<common_with< _It > _It2> constexpr strong_ordering operator<=>
           (const counted_iterator &__x, const counted_iterator< _It2 > &__y)
       template<common_with< _It > _It2> constexpr bool operator== (const
           counted_iterator &__x, const counted_iterator< _It2 > &__y)
       constexpr bool operator== (const counted_iterator &__x,
           default_sentinel_t)

🌈 Detailed Description 🌈

the detailed description is literally this template line and the same iconic sentence:

   template<input_or_output_iterator _It>
       class std::counted_iterator< _It >"An iterator adaptor that keeps track
       of the distance to the end.

so yeah β€” template constrained by input_or_output_iterator _It, and the class does the "distance to the end" thing. That's the whole detailed description, periodt πŸ’…


πŸ‘‘ Author πŸ‘‘

and the author section says, exactly:

Generated automatically by Doxygen for libstdc++ from the source code.


okay that's the page, bestie 🫢 sign-off time: the footer's source/version is libstdc++, the manual tag is std::counted_iterator< _It >(3cxx), and there's no date line on this page β€” so I'm not inventing one, no cap πŸ’œ

πŸ“¦ where this page comes from