std:: counted_iterator
From cppreference.net
|
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
|
(C++20)
|
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
Ejecutar este código
#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
|
(C++20)
|
centinela predeterminado para usar con iteradores que conocen el límite de su rango
(clase) |
|
(C++20)
|
crea un subrango a partir de un iterador y un conteo
(objeto de punto de personalización) |
|
(C++20)
|
una
view
que consiste en los primeros N elementos de otra
view
(plantilla de clase) (objeto adaptador de rango) |