Namespaces
Variants

std:: counted_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(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 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

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

#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

Standardsentinel zur Verwendung mit Iteratoren, die die Grenze ihres Bereichs kennen
(Klasse)
erstellt einen Subbereich aus einem Iterator und einer Anzahl
(Anpassungspunktobjekt)
eine view bestehend aus den ersten N Elementen einer anderen view
(Klassentemplate) (Bereichsadapterobjekt)