Namespaces
Variants

std:: common_iterator

From es.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, std:: sentinel_for < I > S >

requiere ( ! std:: same_as < I, S > && std:: copyable < I > )

class common_iterator ;
(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

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)