std::common_iterator
Von cppreference.com
| 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> ) |
(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) | |
weist einen anderen common_iterator zu(öffentliche Memberfunktion) | |
| greift auf das dereferenzierte Element zu (öffentliche Memberfunktion) | |
inkrementiert den common_iterator(public member function) |
[edit] Nicht-Member-Funktionen
| (C++20) |
vergleicht die zugrunde liegenden Iteratoren oder Sentinels (function template) |
| (C++20) |
berechnet die Distanz zwischen zwei Iterator-Adaptoren (function template) |
| (C++20) |
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp (Funktion) |
| (C++20) |
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen (Funktionstemplate) |
[edit] Hilfsklassen
| berechnet den zugehörigen Differenztyp des std::common_iterator-Typs (class template specialization) | |
| bietet eine einheitliche Schnittstelle zu den Eigenschaften des std::common_iterator-Typs (Klassenvorlagenspezialisierung) |
[edit] Beispiel
Führen Sie diesen Code aus
#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
| (C++20) |
spezifiziert, dass ein Range identische Iterator- und Sentinel-Typen hat (Konzept) |
konvertiert einen view in einen common_range(Klassen-Template) (Range-Adaptor-Objekt) |