Namespaces
Variants

std:: common_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, std:: sentinel_for < I > S >

requires ( ! std:: same_as < I, S > && std:: copyable < I > )

class common_iterator ;
(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

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)