Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/iterator/output iterator"

From cppreference.com
< cpp‎ | iterator
m (Semantic requirements: note subsumed concepts)
Line 14: Line 14:
 
{{dcl end}}
 
{{dcl end}}
  
The {{tt|output_iterator}} concept is a refinement of {{lconcept|input_or_output_iterator}}, adding the requirement that it can be used to write values of values of type and value category encoded by {{tt|T}} (via {{lconcept|indirectly_writable}}). {{lconcept|equality_comparable}} is not required.
+
The {{tt|output_iterator}} concept is a refinement of {{lconcept|input_or_output_iterator}}, adding the requirement that it can be used to write values of type and value category encoded by {{tt|T}} (via {{lconcept|indirectly_writable}}). {{lconcept|equality_comparable}} is not required.
  
 
===Semantic requirements===
 
===Semantic requirements===

Revision as of 02:33, 5 April 2021

 
 
Iterator library
Iterator concepts
output_iterator
(C++20)

Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Defined in header <iterator>
template <class I, class T>

  concept output_iterator =
    std::input_or_output_iterator<I> &&
    std::indirectly_writable<I, T> &&
    requires(I i, T&& t) {
      *i++ = std::forward<T>(t);        // not required to be equality-preserving

    };
(since C++20)

The output_iterator concept is a refinement of input_or_output_iterator, adding the requirement that it can be used to write values of type and value category encoded by T (via indirectly_writable). equality_comparable is not required.

Contents

Semantic requirements

Let E be an expression such that decltype((E)) is T, and i be a dereferenceable object of type I. output_iterator<I, T> is modeled only if all the concepts it subsumes are modeled, and *i++ = E; has effects equivalent to *i = E; ++i;.

Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

Notes

Unlike the LegacyOutputIterator requirements, the output_iterator concept does not require that the iterator category tag be defined.

Algorithms on output iterators should be single pass.

See also

specifies that objects of a type can be incremented and dereferenced
(concept) [edit]