Namensräume
Varianten
Aktionen

std::basic_const_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
basic_const_iterator
(C++23)
const_iterator
(C++23)
const_sentinel
(C++23)
make_const_iterator
(C++23)
make_const_sentinel
(C++23)

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_iterator Iter >
class basic_const_iterator;
(seit C++23)

std::basic_const_iterator ist ein Iterator-Adapter, der sich exakt wie der zugrunde liegende Iterator verhält (der mindestens ein LegacyInputIterator sein muss oder input_iterator modelliert), außer dass das Dereferenzieren den vom zugrunde liegenden Iterator zurückgegebenen Wert als unveränderlich konvertiert. Spezialisierungen von std::basic_const_iterator sind konstante Iteratoren, d.h., der Iterator kann niemals als Ausgabeiterator verwendet werden, da das Modifizieren von Elementen nicht erlaubt ist.

Inhalt

[bearbeiten] Member-Typen

Mitgliedertyp Definition
iterator_category
(bedingt vorhanden)

Wenn Iter forward_iterator modelliert

Andernfalls gibt es keinen Member iterator_category.

iterator_concept
value_type std::iter_value_t<Iter>
difference_type std::iter_difference_t<Iter>
reference (privat) std::iter_const_reference_t<Iter>
((nur zur Veranschaulichung)*)

[bearbeiten] Member-Objekte

Member-Name Definition
current (privat) der zugrunde liegende Iterator, von dem base() kopiert oder verschiebt
((exposition-only member object*)

[bearbeiten] Member-Funktionen

konstruiert einen neuen basic_const_iterator
(öffentliche Memberfunktion) [edit]
greift auf den zugrundeliegenden Iterator zu
(öffentliche Memberfunktion) [edit]
greift auf das dereferenzierte Element zu
(öffentliche Memberfunktion) [edit]
greift per Index auf ein Element zu
(öffentliche Memberfunktion) [edit]
bewegt den Iterator vorwärts oder rückwärts
(public member function) [bearbeiten]
konvertiert in jeden konstanten Iterator, in den ein zugrunde liegender Iterator konvertierbar ist
(public member function) [bearbeiten]
vergleicht die zugrundeliegenden Iteratoren
(public member function) [bearbeiten]

[bearbeiten] Nicht-Member-Funktionen

vergleicht basic_const_iterator mit Nicht-basic_const_iterator
(function template) [bearbeiten]
bewegt den Iterator vorwärts oder rückwärts
(function template) [bearbeiten]
(C++23)
berechnet die Distanz zwischen zwei Iterator-Adaptoren
(Funktionstemplate) [edit]
(C++23)
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp
(Funktion) [edit]

[bearbeiten] Hilfs-Klassen

bestimmt den gemeinsamen Typ eines Iterators und eines angepassten basic_const_iterator-Typs
(class template specialization) [bearbeiten]

[bearbeiten] Hilfs-Alias-Templates

template< std::input_iterator I >
using const_iterator = /* siehe Beschreibung */;
(seit C++23)

Wenn I constant-iterator (ein Exposition-Only-Konzept) modelliert, dann bezeichnet const_iterator<I> einen Typ I. Andernfalls bezeichnet es basic_const_iterator<I>.

template< std::semiregular S >
using const_sentinel = /* siehe Beschreibung */;
(seit C++23)

Wenn S input_iterator modelliert, dann bezeichnet const_sentinel<S> einen Typ const_iterator<S>. Andernfalls bezeichnet es S.

[bearbeiten] Hilfs-Funktions-Templates

template< std::input_iterator T >
constexpr const_iterator<T> make_const_iterator( I it ) { return it; }
(seit C++23)
template< std::semiregular S >
constexpr const_sentinel<S> make_const_sentinel( S s ) { return s; }
(seit C++23)

[bearbeiten] Hinweise

Feature-Test-Makro Wert Std Feature
__cpp_lib_ranges_as_const 202207L (C++23) std::basic_const_iterator
202311L (C++23)
(DR)
std::basic_const_iterator sollte der Konvertierbarkeit seines zugrunde liegenden Typs folgen

[bearbeiten] Beispiel

#include <cassert>
#include <iterator>
#include <vector>
 
int main()
{
    std::vector v{1, 2, 3};
    std::vector<int>::iterator i = v.begin();
    *i = 4;   // OK, v[0] == 4 now
    i[1] = 4; // OK, the same as *(i + 1) = 4;
 
    auto ci = std::make_const_iterator(i);
    assert(*ci == 4);   // OK, can read the underlying object
    assert(ci[0] == 4); // OK, ditto
    // *ci = 13;        // Error: location is read-only
    // ci[0] = 13;      // Error: ditto
    ci.base()[0] = 42;  // OK, underlying iterator is writable
    assert(*ci == 42);  // OK, underlying location v[0] was modified
}

[bearbeiten] 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
P2836R1 C++23 basic_const_iterator folgt nicht der Konvertierbarkeit seines zugrunde liegenden Typs Konvertierungsoperator bereitgestellt