std::ranges::concat_view<Views...>:: iterator
|
template
<
bool
Const
>
class /*iterator*/ |
(1) | ( solo para exposición* ) |
|
Conceptos auxiliares
|
||
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-random-access*/ = /* ver descripción */ ; |
(2) | ( solo para exposición* ) |
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-bidirectional*/ = /* ver descripción */ ; |
(3) | ( solo para exposición* ) |
iterator
es el tipo de los iteradores devueltos por
begin()
y
end()
de
ranges::
concat_view
<
Views...
>
.
Fs
el paquete que consiste en todos los elementos de
Rs
excepto el último elemento. Equivalente a
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-random-access
=
// solo para exposición
all-random-access
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Fs
el paquete que consiste en todos los elementos de
Rs
excepto el último elemento. Equivalente a
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-bidirectional
=
// solo para exposición
all-bidirectional
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Contenidos |
Parámetros de plantilla
| Const | - | si el iterador es un iterador constante |
Tipos anidados
Tipos solo de exposición |
|
| Tipo | Definición |
base-iter
|
std::
variant
<
ranges::
iterator_t
<
maybe-const
<
Const, Views
>>
...
>
( tipo miembro solo de exposición* ) |
Tipos de propiedades del iterador |
|
| Tipo | Definición |
iterator_concept
|
una etiqueta de iterador , ver más abajo |
iterator_category
(condicionalmente presente) |
una etiqueta de iterador, ver más abajo |
value_type
|
concat-value-t
<
maybe-const
<
Const, Views
>
...
>
|
difference_type
|
std::
common_type_t
<
ranges::
range_difference_t
<
|
Determinando el concepto de iterador
iterator_concept
se define de la siguiente manera:
-
Si
concat-is-random-access < Const, Views... > se modela,iterator_conceptdenota std::random_access_iterator_tag . -
De lo contrario, si
concat-is-bidirectional < Const, Views... > se modela,iterator_conceptdenota std::bidirectional_iterator_tag . -
De lo contrario, si
all-forward < Const, Views... > se modela,iterator_conceptdenota std::forward_iterator_tag . -
De lo contrario,
iterator_conceptdenota std::input_iterator_tag .
Determinando la categoría del iterador
iterator_category
se define si y solo si
all-forward
<
Const, Views...
>
se modela. En este caso, se define de la siguiente manera:
-
Si
std::
is_reference_v
<
concat-reference-t <maybe-const < Const, Views > ... >> es false ,iterator_categorydenota std::input_iterator_tag . -
En caso contrario, sea
Csel paquete de tipos std:: iterator_traits < ranges:: iterator_t <maybe-const < Const, Views >>> :: iterator_category ... :-
Si
(
std::
derived_from
<
Cs,
std::
random_access_iterator_tag
>
&&
...
)
&&
concat-is-random-access < Const, Views... > es true ,iterator_categorydenota std::random_access_iterator_tag . -
En caso contrario, si
(
std::
derived_from
<
Cs,
std::
bidirectional_iterator_tag
>
&&
...
)
&&
concat-is-bidirectional < Const, Views... > es true ,iterator_categorydenota std::bidirectional_iterator_tag . -
En caso contrario, si
(
std::
derived_from
<
Cs,
std::
forward_iterator_tag
>
&&
...
)
es
true
,
iterator_categorydenota std::forward_iterator_tag . -
En caso contrario,
iterator_categorydenota std::input_iterator_tag .
-
Si
(
std::
derived_from
<
Cs,
std::
random_access_iterator_tag
>
&&
...
)
&&
Miembros de datos
| Miembro | Definición |
maybe-const
<
Const,
ranges::
concat_view
>
*
parent_
|
un puntero al padre
concat_view
( objeto miembro solo para exposición* ) |
base-iter
it_
|
un iterador en la vista actual
( objeto miembro solo para exposición* ) |
Funciones miembro
|
construye un iterador
(función miembro pública) |
|
|
accede al elemento
(función miembro pública) |
|
|
accede a un elemento por índice
(función miembro pública) |
|
|
avanza o decrementa el iterador subyacente
(función miembro pública) |
|
Plantillas de función solo para exposición |
|
reemplaza
it_
con el inicio de la siguiente vista, si
it_
es el final de la vista actual
( función miembro solo para exposición* ) |
|
decrementa
it_
de modo que apunte a la posición anterior
( función miembro solo para exposición* ) |
|
|
avanza la posición actual en el desplazamiento dado
( función miembro solo para exposición* ) |
|
|
decrementa la posición actual en el valor dado
( función miembro solo para exposición* ) |
|
Funciones no miembro
|
compara los iteradores subyacentes
(función) |
|
|
(C++26)
|
realiza aritmética de iteradores
(función) |
|
(C++26)
|
convierte el resultado de desreferenciar el iterador subyacente a su tipo de referencia de valor asociado
(función) |
|
(C++26)
|
intercambia los objetos apuntados por dos iteradores subyacentes
(función) |
Ejemplo
La versión preliminar se puede consultar en Compiler Explorer .
#include <iostream> #include <iterator> #include <ranges> int main() { namespace views = std::views; static constexpr int p[]{1, 2, 3}; static constexpr auto e = {4, 5}; auto t = views::iota(6, 9); auto cat = views::concat(p, e, t); auto dog = views::concat(cat, cat); for (auto i{dog.begin()}; i != std::default_sentinel; ++i) std::cout << *i << ' '; std::cout << '\n'; }
Salida:
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Referencias
- Estándar C++26 (ISO/IEC 14882:2026):
-
-
26.7.18.3 Plantilla de clase
concat_view::iterator[range.concat.iterator]
-
26.7.18.3 Plantilla de clase