std:: input_or_output_iterator
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
I
>
concept input_or_output_iterator
=
|
(depuis C++20) | |
Le concept
input_or_output_iterator
constitue la base de la taxonomie des concepts d'itérateurs ; chaque type d'itérateur satisfait aux exigences du
input_or_output_iterator
.
Le concept d'exposition uniquement /*can-reference*/ est satisfait si et seulement si le type est referenceable .
Notes
input_or_output_iterator
lui-même ne spécifie que les opérations de déréférencement et d'incrémentation d'un itérateur. La plupart des algorithmes nécessiteront des opérations supplémentaires, par exemple :
-
comparer les itérateurs avec les sentinelles (voir
sentinel_for); -
lire les valeurs d'un itérateur (voir
indirectly_readableetinput_iterator); -
écrire des valeurs dans un itérateur (voir
indirectly_writableetoutput_iterator); -
un ensemble plus riche de mouvements d'itérateurs (voir
forward_iterator,bidirectional_iterator,random_access_iterator).
Contrairement aux
exigences LegacyIterator
, le concept
input_or_output_iterator
n'exige pas la copiabilité.
*
i
doit préserver l'égalité, bien que les opérations d'incrément requises par
weakly_incrementable
ne le soient pas.
Exemple
Un itérateur minimum.
#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>);