Namensräume
Varianten
Aktionen

std::experimental::ranges::OutputIterator

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
OutputIterator



Indirekte aufrufbare Konzepte
                                                  
                                                  
                                                  
Gemeinsame Algorithmus-Anforderungen
                                                  
Konzept-Dienstprogramme
Iterator-Dienstprogramme und -Operationen
Iterator-Traits
Iterator-Adapter
Stream-Iteratoren
 
Definiert in Header <experimental/ranges/iterator>
template< class I, class T >

concept bool OutputIterator =
    Iterator<I> && Writable<I, T> &&
    requires(I i, T&& t) {
        *i++ = std::forward<T>(t); // muss nicht gleichheitserhaltend sein

    };
(Ranges TS)

Das Konzept OutputIterator ist eine Verfeinerung von Iterator und fügt die Anforderung hinzu, dass es zum Schreiben von Werten vom Typ und der Wertkategorie, die von T kodiert werden (über Writable), verwendet werden kann. EqualityComparable ist nicht erforderlich.

Sei E ein Ausdruck, so dass decltype((E)) T ist, und sei i ein dereferenzierbares Objekt vom Typ I. OutputIterator<I, T> ist nur dann erfüllt, wenn *i++ = E; Effekte hat, die äquivalent zu *i = E; ++i; sind.

[bearbeiten] Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.

  • Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.

[bearbeiten] Anmerkungen

Im Gegensatz zu den Anforderungen an Output-Iteratoren im C++-Standard erfordert OutputIterator in der Ranges TS nicht, dass der Iterator-Kategorie-Tag definiert ist.

Algorithmen auf Output-Iteratoren sollten Single-Pass sein.