---
name: "std::counted_iterator"
section: "3"
platform: "linux"
package: "gcc"
version: "16.2.1+r23+gd564253eb6c8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/std::counted_iterator"
---

# std::counted\_iterator(3)

An iterator adaptor that keeps track of the distance to the end.

## NAME

std::counted\_iterator\< \_It \> - An iterator adaptor that keeps track of the distance to the end.

## SYNOPSIS

\#include \<iterator\>

### Public Types

using **difference\_type**\
 using **iterator\_type**\

### Public Member Functions

constexpr **counted\_iterator** (\_It \_\_i, iter\_difference\_t\< \_It \> \_\_n)\
 template\<typename \_It2\> 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 counted\_iterator **operator++** (int)\
 constexpr decltype(auto) **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\> 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

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) noexcept\
 constexpr iter\_difference\_t\< \_It \> **operator-** (const counted\_iterator &\_\_x, **default\_sentinel\_t**) noexcept\
 constexpr iter\_difference\_t\< \_It \> **operator-** (**default\_sentinel\_t**, const counted\_iterator &\_\_y) noexcept\
 template\<common\_with\< \_It \> \_It2\> constexpr strong\_ordering **operator\<=\>** (const counted\_iterator &\_\_x, const counted\_iterator\< \_It2 \> &\_\_y) noexcept\
 template\<common\_with\< \_It \> \_It2\> constexpr bool **operator==** (const counted\_iterator &\_\_x, const counted\_iterator\< \_It2 \> &\_\_y) noexcept\
 constexpr bool **operator==** (const counted\_iterator &\_\_x, **default\_sentinel\_t**) noexcept\

## Detailed Description

### template\<input\_or\_output\_iterator \_It\>

class std::counted\_iterator\< \_It \>"An iterator adaptor that keeps track of the distance to the end.

## Author

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