std::ranges::concat_view<Views...>:: iterator
|
template
<
bool
Const
>
class /*iterator*/ |
(1) | ( exposition uniquement* ) |
|
Concepts auxiliaires
|
||
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-random-access*/ = /* voir description */ ; |
(2) | ( exposition uniquement* ) |
|
template
<
bool
Const,
class
...
Rs
>
concept /*concat-is-bidirectional*/ = /* voir description */ ; |
(3) | ( exposition uniquement* ) |
iterator
est le type des itérateurs retournés par
begin()
et
end()
de
ranges::
concat_view
<
Views...
>
.
Fs
le pack qui contient tous les éléments de
Rs
sauf le dernier élément. Équivalent à
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-random-access
=
// à titre d'illustration uniquement
all-random-access
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Fs
le pack qui contient tous les éléments de
Rs
sauf le dernier élément. Équivalent à
template
<
bool
Const,
class
...
Rs
>
concept
concat-is-bidirectional
=
// exposition only
all-bidirectional
<
Const, Rs...
>
&&
(
ranges::
common_range
<
maybe-const
<
Const, Fs
>>
&&
...
)
;
Table des matières |
Paramètres du modèle
| Const | - | indique si l'itérateur est un itérateur constant |
Types imbriqués
Types d'exposition uniquement |
|
| Type | Définition |
base-iter
|
std::
variant
<
ranges::
iterator_t
<
maybe-const
<
Const, Views
>>
...
>
( type membre d'exposition uniquement* ) |
Types de propriétés d'itérateur |
|
| Type | Définition |
iterator_concept
|
un tag d'itérateur , voir ci-dessous |
iterator_category
(conditionnellement présent) |
un tag d'itérateur, voir ci-dessous |
value_type
|
concat-value-t
<
maybe-const
<
Const, Views
>
...
>
|
difference_type
|
std::
common_type_t
<
ranges::
range_difference_t
<
|
Détermination du concept d'itérateur
iterator_concept
est défini comme suit :
-
Si
concat-is-random-access < Const, Views... > est modélisé,iterator_conceptdénote std::random_access_iterator_tag . -
Sinon, si
concat-is-bidirectional < Const, Views... > est modélisé,iterator_conceptdénote std::bidirectional_iterator_tag . -
Sinon, si
all-forward < Const, Views... > est modélisé,iterator_conceptdénote std::forward_iterator_tag . -
Sinon,
iterator_conceptdénote std::input_iterator_tag .
Détermination de la catégorie d'itérateur
iterator_category
est défini si et seulement si
all-forward
<
Const, Views...
>
est modélisé. Dans ce cas, il est défini comme suit :
-
Si
std::
is_reference_v
<
concat-reference-t <maybe-const < Const, Views > ... >> est false ,iterator_categorydénote std::input_iterator_tag . -
Sinon, soit
Csle pack de types 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... > est true ,iterator_categorydénote std::random_access_iterator_tag . -
Sinon, si
(
std::
derived_from
<
Cs,
std::
bidirectional_iterator_tag
>
&&
...
)
&&
concat-is-bidirectional < Const, Views... > est true ,iterator_categorydénote std::bidirectional_iterator_tag . -
Sinon, si
(
std::
derived_from
<
Cs,
std::
forward_iterator_tag
>
&&
...
)
est
true
,
iterator_categorydénote std::forward_iterator_tag . -
Sinon,
iterator_categorydénote std::input_iterator_tag .
-
Si
(
std::
derived_from
<
Cs,
std::
random_access_iterator_tag
>
&&
...
)
&&
Membres de données
| Membre | Définition |
maybe-const
<
Const,
ranges::
concat_view
>
*
parent_
|
un pointeur vers le parent
concat_view
( objet membre d'exposition uniquement* ) |
base-iter
it_
|
un itérateur dans la vue courante
( objet membre d'exposition uniquement* ) |
Fonctions membres
|
construit un itérateur
(fonction membre publique) |
|
|
accède à l'élément
(fonction membre publique) |
|
|
accède à un élément par index
(fonction membre publique) |
|
|
avance ou décrémente l'itérateur sous-jacent
(fonction membre publique) |
|
Modèles de fonction d'exposition uniquement |
|
remplace
it_
par le début de la vue suivante, si
it_
est la fin de la vue actuelle
( fonction membre d'exposition uniquement* ) |
|
décrémente
it_
de sorte qu'il pointe vers la position précédente
( fonction membre d'exposition uniquement* ) |
|
|
avance la position actuelle d'un décalage donné
( fonction membre d'exposition uniquement* ) |
|
|
décrémente la position actuelle d'une valeur donnée
( fonction membre d'exposition uniquement* ) |
|
Fonctions non membres
|
compare les itérateurs sous-jacents
(fonction) |
|
|
(C++26)
|
effectue des opérations arithmétiques sur les itérateurs
(fonction) |
|
(C++26)
|
convertit le résultat du déréférencement de l'itérateur sous-jacent en son type de référence rvalue associé
(fonction) |
|
(C++26)
|
échange les objets pointés par deux itérateurs sous-jacents
(fonction) |
Exemple
La version préliminaire peut être consultée sur 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'; }
Sortie :
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Références
- Norme C++26 (ISO/CEI 14882:2026) :
-
-
26.7.18.3 Modèle de classe
concat_view::iterator[range.concat.iterator]
-
26.7.18.3 Modèle de classe