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)
Definiert im Header <iterator>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >

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

class common_iterator ;
(seit C++20)

std::common_iterator ist ein Iterator- I /Sentinel- S -Adapter, der einen nicht-gemeinsamen Bereich (bei dem die Typen von I und S unterschiedlich sind) als einen common_range darstellen kann, indem er entweder einen Iterator oder einen Sentinel enthält und die entsprechenden Gleichheitsvergleichsoperatoren operator == definiert.

std::common_iterator kann als "Brücke" zwischen Sequenzen, die durch Iterator/Sentinel-Paare repräsentiert werden, und Legacy-Funktionen verwendet werden, die common_range -ähnliche Sequenzen erwarten.

Inhaltsverzeichnis

Datenmitglieder

Mitgliedername Definition
var ein Objekt vom Typ std:: variant < I, S >
( Nur-Darstellungs-Mitgliedsobjekt* )

Memberfunktionen

konstruiert einen neuen common_iterator
(öffentliche Elementfunktion)
weist einen anderen common_iterator zu
(öffentliche Elementfunktion)
greift auf das referenzierte Element zu
(öffentliche Elementfunktion)
erhöht den common_iterator
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

(C++20)
vergleicht die zugrundeliegenden Iteratoren oder Sentinel-Objekte
(Funktions-Template)
(C++20)
berechnet die Distanz zwischen zwei Iterator-Adaptoren
(Funktions-Template)
(C++20)
konvertiert das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen assoziierten Rvalue-Referenztyp
(Funktion)
(C++20)
vertauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen
(Funktions-Template)

Hilfsklassen

berechnet den assoziierten Differenztyp des std::common_iterator Typs
(Klassen-Template-Spezialisierung)
bietet eine einheitliche Schnittstelle für die Eigenschaften des std::common_iterator Typs
(Klassen-Template-Spezialisierung)

Beispiel

#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));
}

Ausgabe:

Pollux Arcturus Mira Aldebaran

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 23.5.5 Gemeinsame Iteratoren [iterators.common]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 23.5.4 Gemeinsame Iteratoren [iterators.common]

Siehe auch

spezifiziert, dass ein Range identische Iterator- und Sentinel-Typen besitzt
(Konzept)
konvertiert eine view in einen common_range
(Klassentemplate) (Range-Adapter-Objekt)