std::counted_iterator
Von cppreference.com
| Definiert in Header <iterator> |
||
| template< std::input_or_output_iterator I > class counted_iterator; |
(seit C++20) | |
std::counted_iterator ist ein Iterator-Adaptor, der sich exakt wie der zugrundeliegende Iterator verhält, aber zusätzlich die Distanz zum Ende seines Bereichs verfolgt. Dieser Iterator ist genau dann gleich std::default_sentinel, wenn seine Zählung Null erreicht.
Inhalt |
[edit] Member-Typen
| Mitgliedertyp | Definition |
iterator_type
|
I
|
value_type(bedingt vorhanden) |
std::iter_value_t<I> falls I 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 |
[edit] Member-Objekte
| Member-Name | Definition |
current (private) |
der zugrundeliegende Iterator, auf den base() zugreift((exposition-only member object*) |
length (private) |
die Distanz zwischen dem zugrundeliegenden Iterator und dem Ende seines Bereichs ((exposition-only member object*) |
[edit] Member-Funktionen
konstruiert einen neuen counted_iterator(öffentliche Memberfunktion) | |
weist einen anderen counted_iterator zu(öffentliche Memberfunktion) | |
| greift auf den zugrundeliegenden Iterator zu (öffentliche Memberfunktion) | |
| gibt die Distanz zum Ende zurück (public member function) | |
| greift auf das dereferenzierte Element zu (öffentliche Memberfunktion) | |
| greift per Index auf ein Element zu (öffentliche Memberfunktion) | |
inkrementiert oder dekrementiert den counted_iterator(öffentliche Memberfunktion) |
[edit] Nicht-Member-Funktionen
| (C++20) |
vergleicht die Abstände bis zum Ende (Funktionstemplate) |
prüft, ob die Distanz zum Ende gleich 0 ist(function template) | |
| (C++20) |
bewegt den Iterator vorwärts (Funktionstemplate) |
| (C++20) |
berechnet die Distanz zwischen zwei Iterator-Adaptoren (Funktionstemplate) |
| berechnet die vorzeichenbehaftete Distanz zum Ende (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
| bietet eine einheitliche Schnittstelle zu den Eigenschaften des Typs std::counted_iterator (class template specialization) |
[edit] Beispiel
Führen Sie diesen Code aus
#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 }[edit] 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-Typen werden nicht bereitgestellt std::incrementable_traits wird für counted_iterator spezialisiert |
Member-Typen werden hinzugefügt, um die Korrektur von iterator_traits zu berücksichtigen redundante Spezialisierung von std::incrementable_traits wird entfernt |
[edit] Siehe auch
| (C++20) |
Standard-Sentinel zur Verwendung mit Iteratoren, die die Grenze ihres Bereichs kennen (Klasse) |
| (C++20) |
erstellt einen Subrange aus einem Iterator und einer Anzahl (Customization Point Objekt) |
| (C++20) |
ein view, der aus den ersten N Elementen eines anderen view besteht(Klassen-Template) (Range-Adaptor-Objekt) |