std:: counted_iterator
From cppreference.net
|
Definiert im Header
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I
>
class counted_iterator ; |
(seit C++20) | |
std::counted_iterator
ist ein Iterator-Adapter, der sich genau wie der zugrunde liegende Iterator verhält, mit der Ausnahme, dass er den Abstand zum Ende seines Bereichs verfolgt. Dieser Iterator ist gleich
std::default_sentinel
genau dann, wenn sein Zähler null erreicht.
Inhaltsverzeichnis |
Mitgliedertypen
| Mitgliedertyp | Definition |
iterator_type
|
I
|
value_type
(bedingt vorhanden) |
std::
iter_value_t
<
I
>
falls
I
das Konzept
indirectly_readable
modelliert; andernfalls nicht definiert
|
difference_type
|
std:: iter_difference_t < I > |
iterator_concept
(bedingt vorhanden) |
I :: iterator_concept falls vorhanden; andernfalls nicht definiert |
iterator_category
(bedingt vorhanden) |
I :: iterator_category falls vorhanden; andernfalls nicht definiert |
Member-Objekte
| Mitgliedername | Definition |
current
(privat)
|
der zugrundeliegende Iterator, auf den
base()
zugreift
( Nur zur Veranschaulichung verwendetes Mitgliedsobjekt* ) |
length
(privat)
|
die Distanz zwischen dem zugrundeliegenden Iterator und dem Ende seines Bereichs
( Nur zur Veranschaulichung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
konstruiert einen neuen
counted_iterator
(öffentliche Elementfunktion) |
|
weist einen anderen
counted_iterator
zu
(öffentliche Elementfunktion) |
|
|
greift auf den zugrunde liegenden Iterator zu
(öffentliche Elementfunktion) |
|
|
gibt die Entfernung zum Ende zurück
(öffentliche Elementfunktion) |
|
|
greift auf das referenzierte Element zu
(öffentliche Elementfunktion) |
|
|
greift auf ein Element per Index zu
(öffentliche Elementfunktion) |
|
bewegt den
counted_iterator
vorwärts oder rückwärts
(öffentliche Elementfunktion) |
Nicht-Member-Funktionen
|
(C++20)
|
vergleicht die Abstände zum Ende
(Funktions-Template) |
prüft, ob der Abstand zum Ende gleich
0
ist
(Funktions-Template) |
|
|
(C++20)
|
bewegt den Iterator vorwärts
(Funktions-Template) |
|
(C++20)
|
berechnet den Abstand zwischen zwei Iterator-Adaptoren
(Funktions-Template) |
|
berechnet den signierten Abstand zum Ende
(Funktions-Template) |
|
|
(C++20)
|
konvertiert das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen Rvalue-Referenztyp
(Funktion) |
|
(C++20)
|
vertauscht die von zwei zugrundeliegenden Iteratoren referenzierten Objekte
(Funktions-Template) |
Hilfsklassen
|
bietet eine einheitliche Schnittstelle für die Eigenschaften des
std::counted_iterator
Typs
(Klassen-Template-Spezialisierung) |
Beispiel
Diesen Code ausführen
#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); }
Ausgabe:
src[5] { Arcturus, Betelgeuse, Canopus, Deneb, Elnath }
dst[3] { Arcturus, Betelgeuse, Canopus }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| P2259R1 | C++20 |
Member-Typdefinitionen werden nicht bereitgestellt
std::incrementable_traits
ist spezialisiert für
counted_iterator
|
Member-Typdefinitionen werden hinzugefügt, um den
iterator_traits
Fix zu berücksichtigen
Redundante std::incrementable_traits Spezialisierung wird entfernt |
Siehe auch
|
(C++20)
|
Standardsentinel zur Verwendung mit Iteratoren, die die Grenze ihres Bereichs kennen
(Klasse) |
|
(C++20)
|
erstellt einen Subbereich aus einem Iterator und einer Anzahl
(Anpassungspunktobjekt) |
|
(C++20)
|
eine
view
bestehend aus den ersten N Elementen einer anderen
view
(Klassentemplate) (Bereichsadapterobjekt) |