23
Iterators library
[iterators]
23.3
Iterator requirements
[iterator.requirements]
23.3.4
Iterator concepts
[iterator.concepts]
23.3.4.10
Concept
output_iterator
[iterator.concept.output]
1
#
The
output_iterator
concept defines requirements for a type that can be used to write values (from the requirement for
indirectly_writable
(
[iterator.
concept.
writable]
)) and which can be both pre- and post-incremented
.
[
Note
1
:
Output iterators are not required to model
equality_comparable
.
—
end note
]
template
<
class
I,
class
T
>
concept
output_iterator
=
input_or_output_iterator
<
I
>
&
&
indirectly_writable
<
I, T
>
&
&
requires
(
I i, T
&
&
t
)
{
*
i
+
+
=
std
::
forward
<
T
>
(
t
)
;
// not required to be equality-preserving
}
;
2
#
Let
E
be an expression such that
decltype
(
(
E
)
)
is
T
, and let
i
be a dereferenceable object of type
I
.
I
and
T
model
output_iterator
<
I, T
>
only if
*
i
+
+
=
E;
has effects equivalent to:
*
i
=
E;
+
+
i;
3
#
Recommended practice
: The implementation of an algorithm on output iterators should never attempt to pass through the same iterator twice; such an algorithm should be a single-pass algorithm
.