Namensräume
Varianten
Aktionen

std::counted_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
counted_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 >
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) [edit]
weist einen anderen counted_iterator zu
(öffentliche Memberfunktion) [edit]
greift auf den zugrundeliegenden Iterator zu
(öffentliche Memberfunktion) [edit]
gibt die Distanz zum Ende zurück
(public member function) [edit]
greift auf das dereferenzierte Element zu
(öffentliche Memberfunktion) [edit]
greift per Index auf ein Element zu
(öffentliche Memberfunktion) [edit]
inkrementiert oder dekrementiert den counted_iterator
(öffentliche Memberfunktion) [edit]

[edit] Nicht-Member-Funktionen

vergleicht die Abstände bis zum Ende
(Funktionstemplate) [edit]
prüft, ob die Distanz zum Ende gleich ​0​ ist
(function template) [edit]
(C++20)
bewegt den Iterator vorwärts
(Funktionstemplate) [edit]
(C++20)
berechnet die Distanz zwischen zwei Iterator-Adaptoren
(Funktionstemplate) [edit]
berechnet die vorzeichenbehaftete Distanz zum Ende
(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

bietet eine einheitliche Schnittstelle zu den Eigenschaften des Typs std::counted_iterator
(class template specialization) [edit]

[edit] Beispiel

#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

Standard-Sentinel zur Verwendung mit Iteratoren, die die Grenze ihres Bereichs kennen
(Klasse) [bearbeiten]
erstellt einen Subrange aus einem Iterator und einer Anzahl
(Customization Point Objekt)[edit]
ein view, der aus den ersten N Elementen eines anderen view besteht
(Klassen-Template) (Range-Adaptor-Objekt)[edit]