Namespaces
Variants

std:: counted_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
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

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

#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

sentinelle par défaut à utiliser avec les itérateurs qui connaissent la limite de leur plage
(classe)
crée un sous-intervalle à partir d'un itérateur et d'un compteur
(objet de point de personnalisation)
une view composée des N premiers éléments d'une autre view
(modèle de classe) (objet adaptateur de plage)