Namespaces
Variants

std:: counted_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definido en el encabezado <iterator>
template < std:: input_or_output_iterator I >
class counted_iterator ;
(desde C++20)

std::counted_iterator es un adaptador de iterador que se comporta exactamente como el iterador subyacente, excepto que lleva un registro de la distancia hasta el final de su rango. Este iterador es igual a std::default_sentinel si y solo si su contador llega a cero.

Contenidos

Tipos de miembros

Tipo de miembro Definición
iterator_type I
value_type
(condicionalmente presente)
std:: iter_value_t < I > si I modela indirectly_readable ; de lo contrario, no definido
difference_type std:: iter_difference_t < I >
iterator_concept
(condicionalmente presente)
I :: iterator_concept si está presente; de lo contrario, no definido
iterator_category
(condicionalmente presente)
I :: iterator_category si está presente; de lo contrario, no definido

Objetos miembro

Nombre del miembro Definición
current (privado) el iterador subyacente al que base() accede
( objeto miembro solo para exposición* )
length (privado) la distancia entre el iterador subyacente y el final de su rango
( objeto miembro solo para exposición* )

Funciones miembro

construye un nuevo counted_iterator
(función miembro pública)
asigna otro counted_iterator
(función miembro pública)
accede al iterador subyacente
(función miembro pública)
devuelve la distancia hasta el final
(función miembro pública)
accede al elemento apuntado
(función miembro pública)
accede a un elemento por índice
(función miembro pública)
avanza o decrementa el counted_iterator
(función miembro pública)

Funciones no miembro

compara las distancias al final
(plantilla de función)
verifica si la distancia al final es igual a ​0​
(plantilla de función)
(C++20)
avanza el iterador
(plantilla de función)
(C++20)
calcula la distancia entre dos adaptadores de iterador
(plantilla de función)
calcula la distancia con signo al final
(plantilla de función)
(C++20)
convierte el resultado de desreferenciar el iterador subyacente a su tipo de referencia de valor r asociado
(función)
(C++20)
intercambia los objetos apuntados por dos iteradores subyacentes
(plantilla de función)

Clases auxiliares

proporciona una interfaz uniforme para las propiedades del tipo std::counted_iterator
(especialización de plantilla de clase)

Ejemplo

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using std::operator""s;
void print(auto const remark, auto const& v)
{
    const auto size = std::ssize(v);
    std::cout << remark << '[' << size << "] { ";
    for (auto it = std::counted_iterator{std::cbegin(v), size};
         it != std::default_sentinel; ++it)
        std::cout << *it << (it.count() > 1 ? ", " : " ");
    std::cout << "}\n";
}
int main()
{
    const auto src = {"Arcturus"s, "Betelgeuse"s, "Canopus"s, "Deneb"s, "Elnath"s};
    print("src", src);
    std::vector<decltype(src)::value_type> dst;
    std::ranges::copy(std::counted_iterator{src.begin(), 3},
                      std::default_sentinel,
                      std::back_inserter(dst));
    print("dst", dst);
}

Salida:

src[5] { Arcturus, Betelgeuse, Canopus, Deneb, Elnath }
dst[3] { Arcturus, Betelgeuse, Canopus }

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2259R1 C++20 no se proporcionan typedefs de miembro std::incrementable_traits
está especializado para counted_iterator
se añaden typedefs de miembro para considerar iterator_traits corrección
se elimina la especialización redundante de std::incrementable_traits

Véase también

centinela predeterminado para usar con iteradores que conocen el límite de su rango
(clase)
crea un subrango a partir de un iterador y un conteo
(objeto de punto de personalización)
una view que consiste en los primeros N elementos de otra view
(plantilla de clase) (objeto adaptador de rango)