std::input_or_output_iterator
| Definiert in Header <iterator> |
||
| template< class I > concept input_or_output_iterator = |
(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
- das Vergleichen von Iteratoren mit Sentinels (siehe
sentinel_for); - das Lesen von Werten aus einem Iterator (siehe
indirectly_readableundinput_iterator); - das Schreiben von Werten in einen Iterator (siehe
indirectly_writableundoutput_iterator); - eine reichhaltigere Menge an Iterator-Bewegungen (siehe
forward_iterator,bidirectional_iterator,random_access_iterator).
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>);