1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Function Output Iterator</title> 5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Iterator"> 8<link rel="up" href="../specialized.html" title="Specialized Adaptors"> 9<link rel="prev" href="filter.html" title="Filter Iterator"> 10<link rel="next" href="indirect.html" title="Indirect Iterator"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="filter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../specialized.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="indirect.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="iterator.specialized.function_output"></a><a class="link" href="function_output.html" title="Function Output Iterator">Function Output 28 Iterator</a> 29</h3></div></div></div> 30<p> 31 The function output iterator adaptor makes it easier to create custom output 32 iterators. The adaptor takes a unary function and creates a model of Output 33 Iterator. Each item assigned to the output iterator is passed as an argument 34 to the unary function. The motivation for this iterator is that creating 35 a conforming output iterator is non-trivial, particularly because the proper 36 implementation usually requires a proxy object. 37 </p> 38<h3> 39<a name="iterator.specialized.function_output.h0"></a> 40 <span class="phrase"><a name="iterator.specialized.function_output.example"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.example">Example</a> 41 </h3> 42<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">string_appender</span> 43<span class="special">{</span> 44 <span class="identifier">string_appender</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">s</span><span class="special">)</span> 45 <span class="special">:</span> <span class="identifier">m_str</span><span class="special">(&</span><span class="identifier">s</span><span class="special">)</span> 46 <span class="special">{}</span> 47 48 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span> 49 <span class="special">{</span> 50 <span class="special">*</span><span class="identifier">m_str</span> <span class="special">+=</span> <span class="identifier">x</span><span class="special">;</span> 51 <span class="special">}</span> 52 53 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">*</span> <span class="identifier">m_str</span><span class="special">;</span> 54<span class="special">};</span> 55 56<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">*[])</span> 57<span class="special">{</span> 58 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="identifier">x</span><span class="special">;</span> 59 <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"hello"</span><span class="special">);</span> 60 <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">" "</span><span class="special">);</span> 61 <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"world"</span><span class="special">);</span> 62 <span class="identifier">x</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"!"</span><span class="special">);</span> 63 64 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span> <span class="special">=</span> <span class="string">""</span><span class="special">;</span> 65 <span class="identifier">std</span><span class="special">::</span><span class="identifier">copy</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">x</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> 66 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">(</span><span class="identifier">string_appender</span><span class="special">(</span><span class="identifier">s</span><span class="special">)));</span> 67 68 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">s</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 69 70 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> 71<span class="special">}</span> 72</pre> 73<h3> 74<a name="iterator.specialized.function_output.h1"></a> 75 <span class="phrase"><a name="iterator.specialized.function_output.reference"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.reference">Reference</a> 76 </h3> 77<h4> 78<a name="iterator.specialized.function_output.h2"></a> 79 <span class="phrase"><a name="iterator.specialized.function_output.synopsis"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.synopsis">Synopsis</a> 80 </h4> 81<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">UnaryFunction</span><span class="special">></span> 82<span class="keyword">class</span> <span class="identifier">function_output_iterator</span> <span class="special">{</span> 83<span class="keyword">public</span><span class="special">:</span> 84 <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">output_iterator_tag</span> <span class="identifier">iterator_category</span><span class="special">;</span> 85 <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">value_type</span><span class="special">;</span> 86 <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">difference_type</span><span class="special">;</span> 87 <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">pointer</span><span class="special">;</span> 88 <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">reference</span><span class="special">;</span> 89 90 <span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">();</span> 91 92 <span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">&</span> <span class="identifier">f</span><span class="special">);</span> 93 94 <span class="comment">/* see below */</span> <span class="keyword">operator</span><span class="special">*();</span> 95 <span class="identifier">function_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> 96 <span class="identifier">function_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> 97<span class="keyword">private</span><span class="special">:</span> 98 <span class="identifier">UnaryFunction</span> <span class="identifier">m_f</span><span class="special">;</span> <span class="comment">// exposition only</span> 99<span class="special">};</span> 100</pre> 101<h4> 102<a name="iterator.specialized.function_output.h3"></a> 103 <span class="phrase"><a name="iterator.specialized.function_output.requirements"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.requirements">Requirements</a> 104 </h4> 105<p> 106 <code class="computeroutput"><span class="identifier">UnaryFunction</span></code> must be Assignable 107 and Copy Constructible. 108 </p> 109<h4> 110<a name="iterator.specialized.function_output.h4"></a> 111 <span class="phrase"><a name="iterator.specialized.function_output.concepts"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.concepts">Concepts</a> 112 </h4> 113<p> 114 <code class="computeroutput"><span class="identifier">function_output_iterator</span></code> 115 is a model of the Writable and Incrementable Iterator concepts. 116 </p> 117<h4> 118<a name="iterator.specialized.function_output.h5"></a> 119 <span class="phrase"><a name="iterator.specialized.function_output.operations"></a></span><a class="link" href="function_output.html#iterator.specialized.function_output.operations">Operations</a> 120 </h4> 121<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">function_output_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">UnaryFunction</span><span class="special">&</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">UnaryFunction</span><span class="special">());</span> 122</pre> 123<p> 124 <span class="bold"><strong>Effects: </strong></span> Constructs an instance of <code class="computeroutput"><span class="identifier">function_output_iterator</span></code> with <code class="computeroutput"><span class="identifier">m_f</span></code> constructed from <code class="computeroutput"><span class="identifier">f</span></code>. 125 </p> 126<pre class="programlisting"><span class="identifier">unspecified_type</span> <span class="keyword">operator</span><span class="special">*();</span> 127</pre> 128<p> 129 <span class="bold"><strong>Returns: </strong></span> An object <code class="computeroutput"><span class="identifier">r</span></code> 130 of unspecified type such that <code class="computeroutput"><span class="identifier">r</span> 131 <span class="special">=</span> <span class="identifier">t</span></code> 132 is equivalent to <code class="computeroutput"><span class="identifier">m_f</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> for 133 all <code class="computeroutput"><span class="identifier">t</span></code>. 134 </p> 135<pre class="programlisting"><span class="identifier">function_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> 136</pre> 137<p> 138 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 139 </p> 140<pre class="programlisting"><span class="identifier">function_output_iterator</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> 141</pre> 142<p> 143 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 144 </p> 145</div> 146<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 147<td align="left"></td> 148<td align="right"><div class="copyright-footer">Copyright © 2003, 2005 David Abrahams Jeremy Siek Thomas 149 Witt<p> 150 Distributed under the Boost Software License, Version 1.0. (See accompanying 151 file LICENSE_1_0.txt or copy at <ulink url="http://www.boost.org/LICENSE_1_0.txt"> 152 http://www.boost.org/LICENSE_1_0.txt </ulink>) 153 </p> 154</div></td> 155</tr></table> 156<hr> 157<div class="spirit-nav"> 158<a accesskey="p" href="filter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../specialized.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="indirect.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 159</div> 160</body> 161</html> 162