Difference between revisions of "cpp/iterator/ostream iterator"
SuperBoi45 (Talk | contribs) m |
Andreas Krug (Talk | contribs) m (fmt) |
||
(19 intermediate revisions by 12 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|ostream_iterator}} | {{cpp/title|ostream_iterator}} | ||
{{cpp/iterator/ostream_iterator/navbar}} | {{cpp/iterator/ostream_iterator/navbar}} | ||
− | {{ | + | {{dcl begin}} |
− | {{ | + | {{dcl header|iterator}} |
− | {{ | + | {{dcl rev begin}} |
+ | {{dcl|until=c++17|1= | ||
template< class T, | template< class T, | ||
class CharT = char, | class CharT = char, | ||
− | class Traits = std::char_traits< | + | class Traits = std::char_traits<CharT> > |
− | class ostream_iterator : public std::iterator<std::output_iterator_tag, | + | class ostream_iterator |
− | + | : public std::iterator<std::output_iterator_tag, void, void, void, void> | |
}} | }} | ||
− | {{ | + | {{dcl|since=c++17|1= |
+ | template< class T, | ||
+ | class CharT = char, | ||
+ | class Traits = std::char_traits<CharT> > | ||
+ | class ostream_iterator; | ||
+ | }} | ||
+ | {{dcl end}} | ||
− | {{tt|std::ostream_iterator}} is a single-pass | + | {{tt|std::ostream_iterator}} is a single-pass {{named req|OutputIterator}} that writes successive objects of type {{tt|T}} into the {{lc|std::basic_ostream}} object for which it was constructed, using {{tt|operator<<}}. Optional delimiter string is written to the output stream after every write operation. The write operation is performed when the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::ostream_iterator}} is a no-op. |
In a typical implementation, the only data members of {{tt|std::ostream_iterator}} are a pointer to the associated {{tt|std::basic_ostream}} and a pointer to the first character in the delimiter string. | In a typical implementation, the only data members of {{tt|std::ostream_iterator}} are a pointer to the associated {{tt|std::basic_ostream}} and a pointer to the first character in the delimiter string. | ||
− | When writing characters, {{ | + | When writing characters, {{lc|std::ostreambuf_iterator}} is more efficient, since it avoids the overhead of constructing and destructing the sentry object once per character. |
− | + | {{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void|ext= | |
− | {{ | + | {{dsc|{{tt|char_type}}|{{tt|CharT}}}} |
− | + | {{dsc|{{tt|traits_type}}|{{tt|Traits}}}} | |
− | {{ | + | {{dsc|{{tt|ostream_type}}|{{c/core|std::basic_ostream<CharT, Traits>}}}} |
− | {{ | + | }} |
− | {{ | + | |
− | + | ||
===Member functions=== | ===Member functions=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/iterator/ostream_iterator/dsc constructor}} |
− | {{ | + | {{dsc inc|cpp/iterator/ostream_iterator/dsc destructor}} |
− | {{ | + | {{dsc inc|cpp/iterator/ostream_iterator/dsc operator{{=}}}} |
− | {{ | + | {{dsc inc|cpp/iterator/ostream_iterator/dsc operator*}} |
− | {{ | + | {{dsc inc|cpp/iterator/ostream_iterator/dsc operator_arith}} |
− | {{ | + | {{dsc end}} |
− | + | ||
− | + | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | + | |code= | |
− | + | ||
#include <iostream> | #include <iostream> | ||
− | |||
#include <iterator> | #include <iterator> | ||
− | #include < | + | #include <numeric> |
+ | #include <sstream> | ||
int main() | int main() | ||
{ | { | ||
− | std::istringstream str("0. | + | std::istringstream str("0.11 0.22 0.33 0.44"); |
+ | |||
std::partial_sum(std::istream_iterator<double>(str), | std::partial_sum(std::istream_iterator<double>(str), | ||
− | + | std::istream_iterator<double>(), | |
− | + | std::ostream_iterator<double>(std::cout, ", ")); | |
+ | std::cout << '\n'; | ||
} | } | ||
− | + | |output= | |
− | 0. | + | 0.11, 0.33, 0.66, 1.1, |
}} | }} | ||
===See also=== | ===See also=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/iterator/dsc ostreambuf_iterator}} |
− | {{ | + | {{dsc inc|cpp/iterator/dsc istream_iterator}} |
− | {{ | + | {{dsc tclass|cpp/experimental/ostream_joiner|title=std::experimental::ostream_joiner|an output iterator that writes successive elements into an output stream, separating adjacent elements with a delimiter|notes={{mark since libfund_ts_2}}}} |
+ | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 00:16, 12 December 2023
Defined in header <iterator>
|
||
template< class T, class CharT = char, |
(until C++17) | |
template< class T, class CharT = char, |
(since C++17) | |
std::ostream_iterator
is a single-pass LegacyOutputIterator that writes successive objects of type T
into the std::basic_ostream object for which it was constructed, using operator<<
. Optional delimiter string is written to the output stream after every write operation. The write operation is performed when the iterator (whether dereferenced or not) is assigned to. Incrementing the std::ostream_iterator
is a no-op.
In a typical implementation, the only data members of std::ostream_iterator
are a pointer to the associated std::basic_ostream
and a pointer to the first character in the delimiter string.
When writing characters, std::ostreambuf_iterator is more efficient, since it avoids the overhead of constructing and destructing the sentry object once per character.
Contents |
[edit] Member types
Member type | Definition | ||||
iterator_category
|
std::output_iterator_tag | ||||
value_type
|
void | ||||
difference_type
|
| ||||
pointer
|
void | ||||
reference
|
void | ||||
char_type
|
CharT
| ||||
traits_type
|
Traits
| ||||
ostream_type
|
std::basic_ostream<CharT, Traits> |
Member types |
(until C++17) |
[edit] Member functions
constructs a new ostream_iterator (public member function) | |
destructs an ostream_iterator (public member function) | |
writes an object to the associated output sequence (public member function) | |
no-op (public member function) | |
no-op (public member function) |
[edit] Example
#include <iostream> #include <iterator> #include <numeric> #include <sstream> int main() { std::istringstream str("0.11 0.22 0.33 0.44"); std::partial_sum(std::istream_iterator<double>(str), std::istream_iterator<double>(), std::ostream_iterator<double>(std::cout, ", ")); std::cout << '\n'; }
Output:
0.11, 0.33, 0.66, 1.1,
[edit] See also
output iterator that writes to std::basic_streambuf (class template) | |
input iterator that reads from std::basic_istream (class template) | |
(library fundamentals TS v2) |
an output iterator that writes successive elements into an output stream, separating adjacent elements with a delimiter (class template) |