std:: common_iterator
|
Definido en el encabezado
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
requiere
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(desde C++20) | |
std::common_iterator
es un adaptador de iterador
I
/ centinela
S
que puede representar un rango no común (donde los tipos de
I
y
S
difieren) como un
common_range
, al contener ya sea un iterador o un centinela, y definiendo los operadores de comparación de igualdad apropiados
operator
==
.
std::common_iterator
puede utilizarse como un "puente" entre secuencias representadas por un par iterador/sentinela y funciones heredadas que esperan
common_range
-like sequences.
Contenidos |
Miembros de datos
| Nombre del miembro | Definición |
var
|
un objeto de tipo
std::
variant
<
I, S
>
( miembro objeto solo para exposición* ) |
Funciones miembro
construye un nuevo
common_iterator
(función miembro pública) |
|
asigna otro
common_iterator
(función miembro pública) |
|
|
accede al elemento apuntado
(función miembro pública) |
|
avanza el
common_iterator
(función miembro pública) |
Funciones no miembro
|
(C++20)
|
compara los iteradores o centinelas subyacentes
(plantilla de función) |
|
(C++20)
|
calcula la distancia entre dos adaptadores de iterador
(plantilla de función) |
|
(C++20)
|
convierte el resultado de desreferenciar el iterador subyacente a su tipo de referencia de valor asociado
(función) |
|
(C++20)
|
intercambia los objetos apuntados por dos iteradores subyacentes
(plantilla de función) |
Clases auxiliares
|
calcula el tipo de diferencia asociado del
std::common_iterator
(especialización de plantilla de clase) |
|
|
proporciona una interfaz uniforme para las propiedades del
std::common_iterator
(especialización de plantilla de clase) |
Ejemplo
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> template<class ForwardIter> void fire(ForwardIter first, ForwardIter last) { std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "}); } int main() { std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator< std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size() - 1)), IT(std::default_sentinel)); }
Salida:
Pollux Arcturus Mira Aldebaran
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
- 23.5.5 Iteradores comunes [iterators.common]
- Estándar C++20 (ISO/IEC 14882:2020):
-
- 23.5.4 Iteradores comunes [iterators.common]
Véase también
|
(C++20)
|
especifica que un rango tiene tipos de iterador y centinela idénticos
(concept) |
convierte una
view
en un
common_range
(class template) (range adaptor object) |