std:: counted_iterator
From cppreference.net
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I
>
class counted_iterator ; |
(depuis C++20) | |
std::counted_iterator
est un adaptateur d'itérateur qui se comporte exactement comme l'itérateur sous-jacent, sauf qu'il garde une trace de la distance jusqu'à la fin de sa plage. Cet itérateur est égal à
std::default_sentinel
si et seulement si son compteur atteint zéro.
Table des matières |
Types membres
| Type de membre | Définition |
iterator_type
|
I
|
value_type
(conditionnellement présent) |
std::
iter_value_t
<
I
>
si
I
modélise
indirectly_readable
; sinon, non défini
|
difference_type
|
std:: iter_difference_t < I > |
iterator_concept
(conditionnellement présent) |
I :: iterator_concept si présent ; sinon, non défini |
iterator_category
(conditionnellement présent) |
I :: iterator_category si présent ; sinon, non défini |
Objets membres
| Nombre du membre | Définition |
current
(privé)
|
l'itérateur sous-jacent auquel
base()
accède
( objet membre d'exposition uniquement* ) |
length
(privé)
|
la distance entre l'itérateur sous-jacent et la fin de sa plage
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un nouveau
counted_iterator
(fonction membre publique) |
|
assigne un autre
counted_iterator
(fonction membre publique) |
|
|
accède à l'itérateur sous-jacent
(fonction membre publique) |
|
|
retourne la distance jusqu'à la fin
(fonction membre publique) |
|
|
accède à l'élément pointé
(fonction membre publique) |
|
|
accède à un élément par index
(fonction membre publique) |
|
avance ou décrémente le
counted_iterator
(fonction membre publique) |
Fonctions non membres
|
(C++20)
|
compare les distances jusqu'à la fin
(modèle de fonction) |
vérifie si la distance jusqu'à la fin est égale à
0
(modèle de fonction) |
|
|
(C++20)
|
avance l'itérateur
(modèle de fonction) |
|
(C++20)
|
calcule la distance entre deux adaptateurs d'itérateur
(modèle de fonction) |
|
calcule la distance signée jusqu'à la fin
(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
|
fournit une interface uniforme pour les propriétés du type
std::counted_iterator
(spécialisation de modèle de classe) |
Exemple
Exécuter ce code
#include <algorithm> #include <iostream> #include <iterator> #include <string> #include <vector> using std::operator""s; void print(auto const remark, auto const& v) { const auto size = std::ssize(v); std::cout << remark << '[' << size << "] { "; for (auto it = std::counted_iterator{std::cbegin(v), size}; it != std::default_sentinel; ++it) std::cout << *it << (it.count() > 1 ? ", " : " "); std::cout << "}\n"; } int main() { const auto src = {"Arcturus"s, "Betelgeuse"s, "Canopus"s, "Deneb"s, "Elnath"s}; print("src", src); std::vector<decltype(src)::value_type> dst; std::ranges::copy(std::counted_iterator{src.begin(), 3}, std::default_sentinel, std::back_inserter(dst)); print("dst", dst); }
Sortie :
src[5] { Arcturus, Betelgeuse, Canopus, Deneb, Elnath }
dst[3] { Arcturus, Betelgeuse, Canopus }
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2259R1 | C++20 |
les typedefs membres ne sont pas fournis
std::incrementable_traits
est spécialisé pour
counted_iterator
|
les typedefs membres sont ajoutés pour tenir compte de
iterator_traits
correctif
la spécialisation redondante de std::incrementable_traits est supprimée |
Voir aussi
|
(C++20)
|
sentinelle par défaut à utiliser avec les itérateurs qui connaissent la limite de leur plage
(classe) |
|
(C++20)
|
crée un sous-intervalle à partir d'un itérateur et d'un compteur
(objet de point de personnalisation) |
|
(C++20)
|
une
view
composée des N premiers éléments d'une autre
view
(modèle de classe) (objet adaptateur de plage) |