Namensräume
Varianten
Aktionen

std::input_or_output_iterator

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
input_or_output_iterator
(C++20)

Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
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< class I >

    concept input_or_output_iterator =
        requires(I i) {
            { *i } -> /*kann-referenzieren*/;
        } &&

        std::weakly_incrementable<I>;
(seit C++20)

Das Konzept input_or_output_iterator bildet die Grundlage der Iterator-Konzept-Taxonomie; jeder Iteratortyp erfüllt die Anforderungen von input_or_output_iterator.

Das nur zur Veranschaulichung dienende Konzept /*kann-referenzieren*/ ist genau dann erfüllt, wenn der Typ referenzierbar ist.

[bearbeiten] Anmerkungen

input_or_output_iterator selbst spezifiziert nur Operationen für das Dereferenzieren und Inkrementieren eines Iterators. Die meisten Algorithmen erfordern zusätzliche Operationen, zum Beispiel

Im Gegensatz zu den LegacyIterator-Anforderungen erfordert das Konzept input_or_output_iterator keine Kopierbarkeit.

*i muss gleichheitserhaltend sein, obwohl die durch weakly_incrementable erforderlichen Inkrementoperationen dies nicht sind.

[bearbeiten] Beispiel

Ein minimaler Iterator.

#include <cstddef>
#include <iterator>
 
struct SimpleIterator
{
    using difference_type = std::ptrdiff_t;
 
    int operator*();
 
    SimpleIterator& operator++();
    void operator++(int) { ++*this; }
};
 
static_assert(std::input_or_output_iterator<SimpleIterator>);