std:: iterator_traits <std::counted_iterator>
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
(C++20)
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
iterator_traits
<std::counted_iterator>
(C++20)
|
|
Definido en el encabezado
<iterator>
|
||
|
template
<
std::
input_iterator
I
>
requires
/* ver más abajo */
|
(desde C++20) | |
Hereda las propiedades de una especialización personalizada (generada a partir de una especialización parcial estándar o una especialización definida por programa)
std::
iterator_traits
<
I
>
, con el tipo miembro
pointer
ajustado, donde
I
modela
input_iterator
.
Cabe destacar que el
iterator_concept
(si está presente) y el
iterator_category
se heredan de
std::
iterator_traits
<
I
>
.
La condición en la cláusula requires es true si y solo si std:: iterator_traits < I > no se genera desde la plantilla principal.
Contenidos |
Nota
Antes de
P2259R1
, esta especialización se utilizaba incluso si
std::
iterator_traits
<
I
>
se generaba desde la plantilla primaria. Como resultado, al evaluar
std::
counted_iterator
<
I
>
contra un concepto de iterador (por ejemplo,
forward_iterator
), la determinación de
/*ITER_CONCEPT*/
no tomaba en cuenta
I::iterator_concept
, y por lo tanto
std::
counted_iterator
<
I
>
a veces se comportaba erróneamente como si no pudiera modelar ese concepto. Este comportamiento incorrecto se implementó en libstdc++ anterior a 10.4, y en MSVC STL anterior a VS 2022 17.0 Preview 3.
La biblioteca estándar proporciona especializaciones parciales de std::iterator_traits para tipos de puntero, std::counted_iterator , y std::common_iterator .
Ejemplo
#include <iterator> #include <list> #include <type_traits> #include <vector> int main() { std::vector v{1, 2, 3, 4}; std::list l{1, 2, 3, 4}; std::counted_iterator iv{v.begin(), 3}; std::counted_iterator il{l.begin(), 3}; static_assert(std::is_same<int*, std::iterator_traits<decltype(iv)>::pointer>()); static_assert(std::is_same<void, std::iterator_traits<decltype(il)>::pointer>()); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2259R1 | C++20 |
no hay cláusula requires
pointer
se define incondicionalmente como
void
|
restricción añadida |
Véase también
|
proporciona una interfaz uniforme para las propiedades de un iterador
(class template) |