std::ranges:: iota_view<W, Bound>:: iterator
|
struct
/*iterator*/
;
|
(1) | ( exposition seulement* ) |
|
Modèles d'alias d'assistance
|
||
|
template
<
class
I
>
using /*iota-diff-t*/ = /* voir ci-dessous */ ; |
(2) | ( exposition uniquement* ) |
|
Concepts auxiliaires
|
||
|
template
<
class
I
>
concept
/*décrémentable*/
=
|
(3) | ( exposition uniquement* ) |
|
template
<
class
I
>
concept
/*advanceable*/
=
|
(4) | ( exposition uniquement* ) |
iterator
est le type des itérateurs retournés par
begin()
et
end()
de
ranges::
iota_view
<
W, Bound
>
.
-
Si
In'est pas un type entier, ou s'il s'agit d'un type entier et que sizeof ( std:: iter_difference_t < I > ) est supérieur à sizeof ( I ) , alors /*iota-diff-t*/ < I > est std:: iter_difference_t < I > . -
Sinon,
/*iota-diff-t*/
<
I
>
est un type entier signé de largeur supérieure à celle de
Isi un tel type existe. -
Sinon,
Iest l'un des types entiers les plus larges, et /*iota-diff-t*/ < I > est un type de type entier signé non spécifié de largeur non inférieure à celle deI. Il n'est pas spécifié si /*iota-diff-t*/ < I > modéliseweakly_incrementabledans ce cas.
incrementable
, et que les opérateurs pré- et post-
operator
--
pour ce type ont une signification commune.
decrementable
et
totally_ordered
, et que
operator
+
=
,
operator
-
=
,
operator
+
, et
operator
-
entre le type et ses différents types ont une signification commune.
/*iterator*/ modèles
-
random_access_iteratorsi W modéliseadvanceable(4) , -
bidirectional_iteratorsi W modélisedecrementable(3) , -
forward_iteratorsi W modéliseincrementable, et -
input_iteratorsinon.
Cependant, il ne satisfait
LegacyInputIterator
que si
W
modélise
incrementable
, et ne satisfait pas
LegacyInputIterator
dans le cas contraire.
Exigences sémantiques
I
modélise
decrementable
seulement si
I
satisfait
decrementable
et tous les concepts qu'il subsume sont modélisés, et étant donné des objets égaux
a
et
b
de type
I
:
-
Si
a
et
b
sont dans le domaine des opérateurs pré- et post-
operator
--
(c'est-à-dire qu'ils sont décrémentables), alors toutes les expressions suivantes sont
true
:
- std:: addressof ( -- a ) == std:: addressof ( a ) ,
- bool ( a -- == b ) ,
- bool ( ( ( void ) a -- , a ) == -- b ) ,
- bool ( ++ ( -- a ) == b ) .
- Si a et b sont dans le domaine des opérateurs pré- et post- operator ++ (c'est-à-dire qu'ils sont incrémentables), alors bool ( -- ( ++ a ) == b ) est 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
-
objets
a
et
b
de type
Iet -
valeur
n
de type
D,
tel que b soit accessible depuis a après n applications de ++ a , toutes les conditions suivantes sont satisfaites :
- ( a + = n ) est égal à b .
- std:: addressof ( a + = n ) est égal à std:: addressof ( a ) .
- I ( a + n ) est égal à ( a + = n ) .
-
Pour deux valeurs positives quelconques
x
et
y
de type
D, si I ( a + D ( x + y ) ) est bien défini, alors I ( a + D ( x + y ) ) est égal à I ( I ( a + x ) + y ) . - I ( a + D ( 0 ) ) est égal à a .
- Si I ( a + D ( n - 1 ) ) est bien défini, alors I ( a + n ) est égal à [ ] ( I c ) { return ++ c ; } ( I ( a + D ( n - 1 ) ) ) .
- ( b + = - n ) est égal à a .
- ( b - = n ) est égal à a .
- std:: addressof ( b - = n ) est égal à std:: addressof ( b ) .
- I ( b - n ) est égal à ( b - = n ) .
- D ( b - a ) est égal à n .
- D ( a - b ) est égal à D ( - n ) .
- bool ( a <= b ) est true .
Types imbriqués
| Type | Définition |
iterator_concept
|
une balise d'itérateur , voir ci-dessous |
iterator_category
(présent uniquement si
W
modélise
incrementable
et
/*iota-diff-t*/ < W > est un type entier) |
std::input_iterator_tag |
value_type
|
W
|
difference_type
|
/*iota-diff-t*/ < W > |
Détermination du concept d'itérateur
iterator_concept
est défini comme suit :
-
Si
Wmodéliseadvanceable,iterator_conceptdénote std::random_access_iterator_tag . -
Sinon, si
Wmodélisedecrementable,iterator_conceptdénote std::bidirectional_iterator_tag . -
Sinon, si
Wmodéliseincrementable,iterator_conceptdénote std::forward_iterator_tag . -
Sinon,
iterator_conceptdénote std::input_iterator_tag .
Membres de données
| Membre | Définition |
W
value_
|
la valeur actuelle
( objet membre d'exposition uniquement* ) |
Fonctions membres
std::ranges::iota_view:: iterator :: iterator
|
/*iterator*/
(
)
requires
std::
default_initializable
<
W
>
=
default
;
|
(1) | (since C++20) |
|
constexpr
explicit
/*iterator*/
(
W value
)
;
|
(2) | (since C++20) |
value_
.
std::ranges::iota_view:: iterator :: operator*
|
constexpr
W operator
*
(
)
const
noexcept ( std:: is_nothrow_copy_constructible_v < W > ) ; |
(depuis C++20) | |
Retourne
value_
.
Exemple
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(6, 9).begin()}; const int& r = *it; // se lie avec un temporaire assert(*it == 6 and r == 6); ++it; assert(*it == 7 and r == 6); }
std::ranges::iota_view:: iterator :: operator++
|
constexpr
/*iterator*/
&
operator
++
(
)
;
|
(1) | (depuis C++20) |
|
constexpr
void
operator
++
(
int
)
;
|
(2) | (depuis C++20) |
|
constexpr
/*iterator*/
operator
++
(
int
)
requires
std::
incrementable
<
W
>
;
|
(3) | (depuis C++20) |
value_
;
return
*
this
;
.
value_
;
.
value_
;
return
tmp
;
.
Exemple
#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 :: operator--
|
constexpr
/*iterator*/
&
operator
--
(
)
requires
/*decrementable*/
<
W
>
;
|
(1) | (depuis C++20) |
|
constexpr
/*iterator*/
operator
--
(
int
)
requires
/*decrementable*/
<
W
>
;
|
(2) | (depuis C++20) |
value_
;
return
*
this
;
.
value_
;
return
tmp
;
.
Exemple
#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 > ; |
(depuis C++20) | |
Met à jour
value_
et retourne
*
this
:
-
Si
West un type similaire à un entier non signé : -
Sinon, effectue
value_+ = n .
Exemple
#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 > ; |
(depuis C++20) | |
Met à jour
value_
et retourne
*
this
:
-
Si
West un type similaire à un entier non signé : -
Sinon, effectue
value_- = n .
Exemple
#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 > ; |
(depuis C++20) | |
Retourne
W
(
value_
+
n
)
.
Exemple
#include <cassert> #include <ranges> int main() { auto it{std::views::iota(6).begin()}; assert(*it == 6); assert(*(it + 3) == 9); }
Fonctions non membres
opérateur==, <, >, <=, >=, <=> (std::ranges::iota_view:: iterator )
|
friend
constexpr
bool
operator
==
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(1) | (depuis C++20) |
|
friend
constexpr
bool
operator
<
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(2) | (depuis C++20) |
|
friend
constexpr
bool
operator
>
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(3) | (depuis C++20) |
|
friend
constexpr
bool
operator
<=
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(4) | (depuis C++20) |
|
friend
constexpr
bool
operator
>=
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(5) | (depuis C++20) |
|
friend
constexpr
bool
operator
<=>
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(6) | (depuis C++20) |
L'opérateur
!=
est
synthétisé
à partir de
operator==
.
Ces fonctions ne sont pas visibles par la recherche non qualifiée ou qualifiée ordinaire, et ne peuvent être trouvées que par la recherche dépendante des arguments lorsque iterator est une classe associée des arguments.
operator+ (std::ranges::iota_view:: iterator )
|
friend
constexpr
/*iterator*/
operator
+
(
/*iterator*/
i, difference_type n
)
|
(1) | (depuis C++20) |
|
friend
constexpr
/*iterator*/
operator
+
(
difference_type n,
/*iterator*/
i
)
|
(2) | (depuis C++20) |
Équivalent à i + = n ; return i ; .
Ces fonctions ne sont pas visibles par la recherche non qualifiée ordinaire ou la recherche qualifiée , et ne peuvent être trouvées que par la recherche dépendante des arguments lorsque iterator est une classe associée des arguments.
operator- (std::ranges::iota_view:: iterator )
|
friend
constexpr
/*iterator*/
operator
-
(
/*iterator*/
i, difference_type n
)
|
(1) | (depuis C++20) |
|
friend
constexpr
difference_type operator
-
(
const
/*iterator*/
&
x,
const
/*iterator*/
&
y
)
|
(2) | (depuis C++20) |
D
le type
difference_type
:
Ces fonctions ne sont pas visibles par la recherche non qualifiée ou recherche qualifiée ordinaire, et ne peuvent être trouvées que par la recherche dépendante des arguments lorsque iterator est une classe associée des arguments.
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2259R1 | C++20 |
le membre
iterator_category
est toujours défini
|
défini uniquement si
W
satisfait
incrementable
|
| LWG 3580 | C++20 | les corps de operator + et operator - empêchent le déplacement implicite | rendus compatibles avec le déplacement implicite |