std:: common_iterator
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
requires
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(depuis C++20) | |
std::common_iterator
est un adaptateur d'itérateur
I
/ sentinelle
S
qui peut représenter une plage non commune (où les types de
I
et
S
diffèrent) comme une
common_range
, en contenant soit un itérateur soit une sentinelle, et en définissant les opérateurs de comparaison d'égalité appropriés
operator
==
.
std::common_iterator
peut être utilisé comme un "pont" entre les séquences représentées par une paire itérateur/sentinelle et les fonctions héritées qui attendent
common_range
-like sequences.
Table des matières |
Membres de données
| Nombre du membre | Définition |
var
|
un objet de type
std::
variant
<
I, S
>
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un nouveau
common_iterator
(fonction membre publique) |
|
assigne un autre
common_iterator
(fonction membre publique) |
|
|
accède à l'élément pointé
(fonction membre publique) |
|
avance le
common_iterator
(fonction membre publique) |
Fonctions non membres
|
(C++20)
|
compare les itérateurs ou sentinelles sous-jacents
(modèle de fonction) |
|
(C++20)
|
calcule la distance entre deux adaptateurs d'itérateur
(modèle de fonction) |
|
(C++20)
|
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++20)
|
échange les objets pointés par deux itérateurs sous-jacents
(modèle de fonction) |
Classes d'assistance
|
calcule le type de différence associé du
std::common_iterator
(spécialisation de modèle de classe) |
|
|
fournit une interface uniforme pour les propriétés du
std::common_iterator
(spécialisation de modèle de classe) |
Exemple
#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)); }
Sortie :
Pollux Arcturus Mira Aldebaran
Références
- Norme C++23 (ISO/IEC 14882:2024) :
-
- 23.5.5 Itérateurs communs [iterators.common]
- Norme C++20 (ISO/CEI 14882:2020) :
-
- 23.5.4 Itérateurs communs [iterators.common]
Voir aussi
|
(C++20)
|
spécifie qu'une plage possède des types d'itérateur et de sentinelle identiques
(concept) |
convertit une
view
en une
common_range
(modèle de classe) (objet adaptateur de plage) |