std::ranges:: iota_view<W, Bound>:: iterator
|
struct
/*iterator*/
;
|
(1) | ( solo para exposición* ) |
|
Plantillas de alias auxiliares
|
||
|
template
<
class
I
>
using /*iota-diff-t*/ = /* ver abajo */ ; |
(2) | ( solo para exposición* ) |
|
Conceptos auxiliares
|
||
|
template
<
class
I
>
concepto
/*decrementable*/
=
|
(3) | ( solo para exposición* ) |
|
template
<
class
I
>
concept
/*avanzable*/
=
|
(4) | ( solo para exposición* ) |
iterator
es el tipo de los iteradores devueltos por
begin()
y
end()
de
ranges::
iota_view
<
W, Bound
>
.
-
Si
Ino es un tipo integral, o si es un tipo integral y sizeof ( std:: iter_difference_t < I > ) es mayor que sizeof ( I ) , entonces /*iota-diff-t*/ < I > es std:: iter_difference_t < I > . -
De lo contrario,
/*iota-diff-t*/
<
I
>
es un tipo entero con signo de ancho mayor que el ancho de
Isi tal tipo existe. -
De lo contrario,
Ies uno de los tipos integrales más anchos, y /*iota-diff-t*/ < I > es un tipo similar a entero con signo no especificado de ancho no menor que el ancho deI. No está especificado si /*iota-diff-t*/ < I > modelaweakly_incrementableen este caso.
incrementable
, y los operadores de pre- y post-
operator
--
para el tipo tienen el significado común.
decrementable
como
totally_ordered
, y que
operator
+
=
,
operator
-
=
,
operator
+
, y
operator
-
entre el tipo y sus diferentes tipos tienen significado común.
/*iterator*/ modelos
-
random_access_iteratorsi W modelaadvanceable(4) , -
bidirectional_iteratorsi W modeladecrementable(3) , -
forward_iteratorsi W modelaincrementable, y -
input_iteratoren caso contrario.
Sin embargo, solo satisface
LegacyInputIterator
si
W
modela
incrementable
, y no satisface
LegacyInputIterator
en caso contrario.
Requisitos semánticos
I
modela
decrementable
solo si
I
satisface
decrementable
y todos los conceptos que subsume están modelados, y dados objetos iguales
a
y
b
de tipo
I
:
-
Si
a
y
b
están en el dominio tanto del pre- como del post-
operator
--
(es decir, son decrementables), entonces todas las siguientes son
true
:
- std:: addressof ( -- a ) == std:: addressof ( a ) ,
- bool ( a -- == b ) ,
- bool ( ( ( void ) a -- , a ) == -- b ) ,
- bool ( ++ ( -- a ) == b ) .
- Si a y b están en el dominio tanto del pre- como del post- operator ++ (es decir, son incrementables), entonces bool ( -- ( ++ a ) == b ) es true .
D
denote
/*iota-diff-t*/
<
I
>
. Type
I
models
advanceable
only if
I
satisfies
advanceable
and all concepts it subsumes are modeled, and given
-
objetos
a
y
b
de tipo
Iy -
valor
n
de tipo
D,
tal que b es alcanzable desde a después de n aplicaciones de ++ a , se satisfacen todas las siguientes condiciones:
- ( a + = n ) es igual a b .
- std:: addressof ( a + = n ) es igual a std:: addressof ( a ) .
- I ( a + n ) es igual a ( a + = n ) .
-
Para cualesquiera dos valores positivos
x
y
y
de tipo
D, si I ( a + D ( x + y ) ) está bien definido, entonces I ( a + D ( x + y ) ) es igual a I ( I ( a + x ) + y ) . - I ( a + D ( 0 ) ) es igual a a .
- Si I ( a + D ( n - 1 ) ) está bien definido, entonces I ( a + n ) es igual a [ ] ( I c ) { return ++ c ; } ( I ( a + D ( n - 1 ) ) ) .
- ( b + = - n ) es igual a a .
- ( b - = n ) es igual a a .
- std:: addressof ( b - = n ) es igual a std:: addressof ( b ) .
- I ( b - n ) es igual a ( b - = n ) .
- D ( b - a ) es igual a n .
- D ( a - b ) es igual a D ( - n ) .
- bool ( a <= b ) es true .
Tipos anidados
| Tipo | Definición |
iterator_concept
|
una etiqueta de iterador , ver más abajo |
iterator_category
(solo presente si
W
modela
incrementable
y
/*iota-diff-t*/ < W > es un tipo integral) |
std::input_iterator_tag |
value_type
|
W
|
difference_type
|
/*iota-diff-t*/ < W > |
Determinando el concepto de iterador
iterator_concept
se define de la siguiente manera:
-
Si
Wmodelaadvanceable,iterator_conceptdenota std::random_access_iterator_tag . -
De lo contrario, si
Wmodeladecrementable,iterator_conceptdenota std::bidirectional_iterator_tag . -
De lo contrario, si
Wmodelaincrementable,iterator_conceptdenota std::forward_iterator_tag . -
De lo contrario,
iterator_conceptdenota std::input_iterator_tag .
Miembros de datos
| Miembro | Definición |
W
value_
|
el valor actual
( objeto miembro solo para exposición* ) |
Funciones miembro
std::ranges::iota_view:: iterator :: iterator
|
/*iterator*/
(
)
requires
std::
default_initializable
<
W
>
=
default
;
|
(1) | (desde C++20) |
|
constexpr
explicit
/*iterator*/
(
W value
)
;
|
(2) | (desde C++20) |
value_
.
std::ranges::iota_view:: iterator :: operator*
|
constexpr
W operator
*
(
)
const
noexcept ( std:: is_nothrow_copy_constructible_v < W > ) ; |
(desde C++20) | |
Devuelve
value_
.
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(6, 9).begin()}; const int& r = *it; // se enlaza con temporal assert(*it == 6 and r == 6); ++it; assert(*it == 7 and r == 6); }
std::ranges::iota_view:: iterator :: operador++
|
constexpr
/*iterator*/
&
operator
++
(
)
;
|
(1) | (desde C++20) |
|
constexpr
void
operator
++
(
int
)
;
|
(2) | (desde C++20) |
|
constexpr
/*iterator*/
operator
++
(
int
)
requires
std::
incrementable
<
W
>
;
|
(3) | (desde C++20) |
value_
;
return
*
this
;
.
value_
;
.
value_
;
return
tmp
;
.
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(8).begin()}; assert(*it == 8); assert(*++it == 9); assert(*it++ == 9); assert(*it == 10); }
std::ranges::iota_view:: iterator :: operador--
|
constexpr
/*iterator*/
&
operator
--
(
)
requires
/*decrementable*/
<
W
>
;
|
(1) | (desde C++20) |
|
constexpr
/*iterator*/
operator
--
(
int
)
requires
/*decrementable*/
<
W
>
;
|
(2) | (desde C++20) |
value_
;
return
*
this
;
.
value_
;
return
tmp
;
.
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(8).begin()}; assert(*it == 8); assert(*--it == 7); assert(*it-- == 7); assert(*it == 6); }
std::ranges::iota_view:: iterator :: operator+=
|
constexpr
/*iterator*/
&
operator
+
=
(
difference_type n
)
requires /*advanceable*/ < W > ; |
(desde C++20) | |
Actualiza
value_
y retorna
*
this
:
-
Si
Wes un tipo similar a entero sin signo : -
De lo contrario, ejecuta
value_+ = n .
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(5).begin()}; assert(*it == 5); assert(*(it += 3) == 8); }
std::ranges::iota_view:: iterator :: operator-=
|
constexpr
/*iterator*/
&
operator
-
=
(
difference_type n
)
requires /*advanceable*/ < W > ; |
(desde C++20) | |
Actualiza
value_
y retorna
*
this
:
-
Si
Wes un tipo similar a entero sin signo : -
De lo contrario, ejecuta
value_- = n .
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(6).begin()}; assert(*it == 6); assert(*(it -= -3) == 9); }
std::ranges::iota_view:: iterator :: operator[]
|
constexpr
W operator
[
]
(
difference_type n
)
const
requires /*advanceable*/ < W > ; |
(desde C++20) | |
Devuelve
W
(
value_
+
n
)
.
Ejemplo
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(6).begin()}; assert(*it == 6); assert(*(it + 3) == 9); }
Funciones no miembro
operator==, <, >, <=, >=, <=> (std::ranges::iota_view:: iterator )
|
friend
constexpr
bool
operator
==
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(1) | (desde C++20) |
|
friend
constexpr
bool
operator
<
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(2) | (desde C++20) |
|
friend
constexpr
bool
operator
>
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(3) | (desde C++20) |
|
friend
constexpr
bool
operator
<=
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(4) | (desde C++20) |
|
friend
constexpr
bool
operator
>=
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(5) | (desde C++20) |
|
friend
constexpr
bool
operator
<=>
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(6) | (desde C++20) |
El operador
!=
es
sintetizado
a partir de
operator==
.
Estas funciones no son visibles para la búsqueda unqualified o qualified lookup ordinaria, y solo pueden ser encontradas mediante argument-dependent lookup cuando iterator es una clase asociada de los argumentos.
operator+ (std::ranges::iota_view:: iterator )
|
friend
constexpr
/*iterator*/
operator
+
(
/*iterator*/
i, difference_type n
)
|
(1) | (desde C++20) |
|
friend
constexpr
/*iterator*/
operator
+
(
difference_type n,
/*iterator*/
i
)
|
(2) | (desde C++20) |
Equivalente a i + = n ; return i ; .
Estas funciones no son visibles para la búsqueda no calificada ordinaria o la búsqueda calificada , y solo pueden ser encontradas mediante búsqueda dependiente de argumentos cuando iterator es una clase asociada de los argumentos.
operador- (std::ranges::iota_view:: iterator )
|
friend
constexpr
/*iterator*/
operator
-
(
/*iterator*/
i, difference_type n
)
|
(1) | (desde C++20) |
|
friend
constexpr
difference_type operator
-
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(2) | (desde C++20) |
D
igual a
difference_type
:
Estas funciones no son visibles para la búsqueda no calificada ordinaria o la búsqueda calificada , y solo pueden encontrarse mediante búsqueda dependiente de argumentos cuando iterator es una clase asociada de los argumentos.
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 |
member
iterator_category
está siempre definido
|
definido solo si
W
satisface
incrementable
|
| LWG 3580 | C++20 | los cuerpos de operator + y operator - excluyen el movimiento implícito | hecho adecuado para movimiento implícito |