Namensräume
Varianten
Aktionen

std::common_iterator

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
common_iterator
(C++20)

Bereichszugriff
(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 in Header <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;
(seit C++20)

std::common_iterator ist ein Iterator-I / Sentinel-S-Adapter, der einen nicht-gemeinsamen Bereich (bei dem sich die Typen von I und S unterscheiden) als 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 ein Iterator/Sentinel-Paar repräsentiert werden, und Legacy-Funktionen, die common_range-ähnliche Sequenzen erwarten, verwendet werden.

Inhalt

[edit] Datenmember

Member-Name Definition
var ein Objekt vom Typ std::variant<I, S>
((exposition-only member object*)

[edit] Member-Funktionen

konstruiert einen neuen common_iterator
(öffentliche Memberfunktion) [edit]
weist einen anderen common_iterator zu
(öffentliche Memberfunktion) [edit]
greift auf das dereferenzierte Element zu
(öffentliche Memberfunktion) [edit]
inkrementiert den common_iterator
(public member function) [edit]

[edit] Nicht-Member-Funktionen

vergleicht die zugrunde liegenden Iteratoren oder Sentinels
(function template) [edit]
(C++20)
berechnet die Distanz zwischen zwei Iterator-Adaptoren
(function template) [edit]
(C++20)
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion) [edit]
(C++20)
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen
(Funktionstemplate) [edit]

[edit] Hilfsklassen

berechnet den zugehörigen Differenztyp des std::common_iterator-Typs
(class template specialization) [edit]
bietet eine einheitliche Schnittstelle zu den Eigenschaften des std::common_iterator-Typs
(Klassenvorlagenspezialisierung) [bearbeiten]

[edit] 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

[edit] Referenzen

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

[edit] Siehe auch

spezifiziert, dass ein Range identische Iterator- und Sentinel-Typen hat
(Konzept) [edit]
konvertiert einen view in einen common_range
(Klassen-Template) (Range-Adaptor-Objekt)[edit]